<?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>Shadowburst</title>
	<atom:link href="http://shadowburst.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shadowburst.com</link>
	<description>Design + Engineering + Fun</description>
	<lastBuildDate>Tue, 04 Jun 2013 19:43:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Showr 1.5</title>
		<link>http://shadowburst.com/2013/06/04/showr-1-5/</link>
		<comments>http://shadowburst.com/2013/06/04/showr-1-5/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 19:43:54 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=170</guid>
		<description><![CDATA[Showr 1.4 introduced behind-the-scenes improvements, to make the Pro settings work more efficiently and look &#8220;buttery smooth&#8221;. Unfortunately, these improvements also resulted in a compatibility problem for devices running versions of Android earlier than 4.1. This would result in Showr&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/06/04/showr-1-5/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>Showr 1.4 introduced behind-the-scenes improvements, to make the Pro settings work more efficiently and look &#8220;buttery smooth&#8221;. Unfortunately, these improvements also resulted in a compatibility problem for devices running versions of Android earlier than 4.1. This would result in Showr exiting unexpectedly from the widget settings screen , for Pro users who had cleared the cache of Google Play Services or changed to a different Android version. An error in our internal validation tools meant that this problem wasn&#8217;t detected before the update was released.</p>
<p>In addition, users on phones (but not tablets) may have seen similar unreliability when trying to set up the new &#8220;Launch an app&#8221; click action. This problem had the same underlying cause, so was also not detected, but could appear regardless of the Android version in use. In both cases, the problem only showed up while changing settings: widgets would continue to update in the usual way, and no data was lost.</p>
<p>Thanks to one user who reported the errors, we were able to fix them all, and improve our internal validation to avoid such problems in future. It really does help if you click <strong>Report</strong> on an error dialog. Doing so doesn&#8217;t share any of your personal data, nor the images or feeds you&#8217;re using. We&#8217;re sorry for any inconvenience caused by our mistake, and we resolve to do better in future. It&#8217;s important to us that you can depend on Showr no matter what.</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/06/04/showr-1-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quoting in messages</title>
		<link>http://shadowburst.com/2013/05/27/quoting-in-messages/</link>
		<comments>http://shadowburst.com/2013/05/27/quoting-in-messages/#comments</comments>
		<pubDate>Mon, 27 May 2013 15:30:24 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Design Blog]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=153</guid>
		<description><![CDATA[When I was younger, I played a racing game called Lotus Esprit Turbo Challenge (as well as its two sequels). It had a two-player split-screen mode where both players, and a lot of computer-controlled cars, race for first place. In&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/05/27/quoting-in-messages/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>When I was younger, I played a racing game called Lotus Esprit Turbo Challenge (as well as its two sequels). It had a two-player split-screen mode where both players, and a lot of computer-controlled cars, race for first place. In this mode, when you got close behind the other human player, it would warn you on the screen: &#8220;DAN AHEAD&#8221;. At least, that&#8217;s what it said when I told it my correct name. Perhaps the earliest hint of my hacker tendencies was that I found it hilarious to enter my name as &#8220;SLOW DOWN&#8221;. Then, when my human adversary was in danger of catching me up, the game would be fooled into giving them a very unhelpful warning.</p>
<p><span id="more-153"></span>It&#8217;s a little sad that 20 years down the line, a lot of software still deals poorly with what I call the <i>quoting problem</i>. That is, the problem of having to protect or distinguish text that&#8217;s come from one source (such as the user&#8217;s name) when it appears inside another piece of text (such as a message shown to users).</p>
<h2>A big problem</h2>
<p>Lotus Esprit Turbo Challenge is a silly example, but often the consequences are more serious. If the inserted text comes from the user and the enclosing text is a command to be interpreted by a machine, then simply inserting the text allows the user to change the structure of the machine instructions. This is the heart of all SQL injection, HTML and script injection. Finding and fixing problems like this keeps a lot of programmers in employment, and exploiting problems like this lets criminals impersonate your bank, disrupt online services, access your private information, or steal millions of pounds.</p>
<h2>Two solutions</h2>
<p>When the enclosing text is for humans, not computers, there are two main ways to distinguish. The traditional way is to enclose the inserted text with special marks: &#8220;Come here, Mr. Watson, I need you,&#8221; said Bell. This is easy to achieve; in an Android program, one might have the enclosing text <code>"%s" ahead</code> in a <a title="'String Resources' in the Android developers' guide" href="http://developer.android.com/guide/topics/resources/string-resource.html" target="_blank"><i>string resource</i></a>, and then insert using <code><a title="'String.format' in the Android developers' API reference" href="http://developer.android.com/reference/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)" target="_blank">String.format</a>(getString(R.string.player_ahead), player_name))</code>. Using Android&#8217;s built-in localization (language translation) features, you can translate the enclosing text into every language you need, even with different quoting marks, and still use the same line of code to insert the player&#8217;s name: <code>«%s» en avant</code>.<br />
This gets a little more complex when the inserted text can also contain the special marks, for example if I enter my name as <b>&#8220;</b>. That example demonstrates the second way of quoting: using text formatting or colour. In most cases, the user-provided inserted text is just plain text, with no formatting, so using formatting this way can&#8217;t lead to any confusion: whatever the user enters, they can&#8217;t make it look like part of the enclosing text. (There&#8217;s still a problem if the user can enter no text at all, such as an empty name, but in many cases that won&#8217;t be allowed anyway, or requires a completely different enclosing text.)</p>
<h2>How to program it</h2>
<p>But since <code>String.format</code> only works on plain text, this formatting is a little harder to achieve. Any Android programmer will already know that <a title="'SpannableString' in the Android developers' API reference" href="http://developer.android.com/reference/android/text/SpannableString.html" target="_blank"><code>SpannableString</code></a> (through the <a title="CharSequence in the Android developers' API reference" href="http://developer.android.com/reference/java/lang/CharSequence.html" target="_blank"><code>CharSequence</code></a> interface) is Android&#8217;s way to add colours and other formatting to text. But how to put it all together? There are three ways.<br />
The Android documentation recommends using HTML. For example, make the text resource <code>&amp;lt;b&amp;gt;%s&amp;lt;/b&amp;gt; ahead</code> (you need to write it that way in the XML file). Then, use <code>String.format(getString(R.string.player_ahead), player_name</code> as before to come up with an HTML string containing the player&#8217;s name. You can then pass this to <code>Html.fromHtml</code> to have Android interpret the HTML markup and give you the <code>CharSequence</code> you need.<br />
This method has a big problem. What if the user&#8217;s name contains HTML markup? Because you&#8217;ve added an extra interpretation step after inserting the user&#8217;s text, you&#8217;ve just replaced the problem of confusing the user with the problem of confusing the machine. As explained above, this often has horrendous security implications. In this case, the consequence is likely to be the program exiting suddenly with an unhandled exception. So this extra step has to be balanced by another step beforehand: removing or escaping any HTML markup from the user&#8217;s text before substituting it. Because of the extra risk and complexity of what is Google&#8217;s recommended technique, it&#8217;s no surprise many app authors stick to &#8220;traditional&#8221; quoting, even though that method is less convenient for the user.<br />
Only for completeness do I mention this method: <a title="'SpannableStringBuilder' in the Android developers' API reference" href="http://developer.android.com/reference/android/text/SpannableStringBuilder.html" target="_blank"><code>SpannableStringBuilder</code></a>. It&#8217;s an analogue to <code>StringBuilder</code>, with a similar interface extended to specify formatting. Like <code>StringBuilder</code>, it&#8217;s useful in some special cases, such as building comma-separated lists, but too inconvenient to be useful for simple text insertion. All the formatting details must be specified in code, not in string resources. (In the Lotus Esprit example, this might actually be what we want: perhaps we want the colour of the player&#8217;s name to match the colour of their car.)</p>
<h2>The easiest solution</h2>
<p>Have you ever noticed that Android&#8217;s <a title="'Resources' in the Android developers' API reference" href="http://developer.android.com/reference/android/content/res/Resources.html" target="_blank"><code>Resources</code></a> class has not only a <code>getString</code> function, but also <code>getText</code>? The latter returns a formatted <code>CharSequence</code>. Where does this formatting come from? In fact, Android&#8217;s resource builder understands a limited set of HTML tags inside string resources. For example, you can have a string resource containing the text <code>This &lt;i&gt;is&lt;/i&gt; awesome</code>. Retrieving this with <code>getString</code> strips the tags, but retrieving it with <code>getText</code> interprets them as italic text. Using this method, you can create bold, italic, and underlined texts. You can change the font size and colour using <code>&lt;font&gt;</code> tags, and even add hyperlinks (which could point to localised URLs). This allows the convenient formatting we got from <code>"%1" ahead</code>, but <code>String.format</code> can only work with plain <code>String</code>s, not <code>CharSequence</code>s.<br />
Luckily, Android provides a little-known function with similar functionality. <code>TextUtils.expandTemplate</code> is a straightforward <code>String.format</code> replacement, all of whose arguments are <code>CharSequence</code>s. It also doesn&#8217;t share the C <code>printf</code> legacy of encoding types in the enclosing text: a simple <code>^1</code>, <code>^2</code> etc. refers to each argument. Using TextUtils.expandTemplate, we could write our message as <code>Player &lt;b&gt;^1&lt;/b&gt; ahead</code>, and insert the player&#8217;s name with <code>TextUtils.expandTemplate(getResources().getText(R.string.player_ahead), player_name)</code>. It&#8217;s even easier-to-use than the <code>String.format</code> technique, doesn&#8217;t have problems with any characters inside the inserted text, and doesn&#8217;t risk HTML injection.<br />
With this technique there&#8217;s no excuse for getting quoting wrong. It should be a part of every Android programmer&#8217;s toolbox.</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/05/27/quoting-in-messages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showr 1.4</title>
		<link>http://shadowburst.com/2013/05/27/showr-1-4/</link>
		<comments>http://shadowburst.com/2013/05/27/showr-1-4/#comments</comments>
		<pubDate>Mon, 27 May 2013 09:07:10 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=156</guid>
		<description><![CDATA[This month&#8217;s update is a small one after all the big features of March and April, but it&#8217;s still packed with improvements to help you get the most out of your Android phone. Create a Showr from the web browser&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/05/27/showr-1-4/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>This month&#8217;s update is a small one after all the big features of March and April, but it&#8217;s still packed with improvements to help you get the most out of your Android phone.</p>
<h2>Create a Showr from the web browser</h2>
<p>Showr 1.4 adds <em>intent filters</em> for links to RSS and Atom feeds and image files. When you click such a link in your web browser, the &#8220;Complete action using&#8221; dialog will show, with &#8220;Add image to Showr&#8221; or &#8220;Add feed to Showr&#8221; as an option. This will take you straight to the &#8220;Get image from Internet&#8221; wizard, with the address filled in.</p>
<p>Unfortunately, Android doesn&#8217;t allow an app to create a home screen widget this way, so the wizard saves an <em>inactive</em> Showr configuration. After finishing the wizard, drop a Showr widget on to your home screen or lock screen in the usual way, and choose &#8220;Activate inactive widget&#8221;. That activates the widget using the saved settings, so you don&#8217;t have to enter the address yourself.</p>
<p>Not all web browsers on Android can launch an app from a web link. For example, Chrome works perfectly, but Firefox doesn&#8217;t currently support this: it displays the raw code of the RSS file instead of letting you open Showr. The Firefox guys are working on this, so be patient with them.</p>
<h2>Launch an app from a Showr</h2>
<p>The <strong>When you click the widget</strong> setting gets a new option, to launch an app. A new setting on the same page lets you choose which app to launch. You can pick any app that shows up in the main list of apps.</p>
<p>For example, if you use a Showr to show the latest photos from a Flickr <em>photostream</em>, you might want a click on the photo to open a Flickr app you have installed, instead of browsing to the Flickr website. If you show a stock price chart, you might want to click on it to open a stock market app.</p>
<p>This new functionality also lets you use Showr as a way to create custom shortcuts for any app. Maybe the default icon for Chrome clashes with your wallpaper. No problem! Just draw or download a new icon, create a Showr of that icon, and set it to launch Chrome when clicked.</p>
<p>If you want to see other kinds of click action (such as opening a particular contact, or triggering a sync), email <em>support</em> at this domain to suggest it. We already have plans for more click actions to add, but your feedback sets our priorities.</p>
<h2>Captive Wi-Fi detection</h2>
<p>A <em>captive Wi-Fi network</em> (also called a <em>captive portal</em> or <em>walled garden</em>) is the kind you often find in hotels or pubs. When you visit any website, it redirects you to a page where you have to enter a code, accept some terms and conditions, or log in, before you can get real Internet access.</p>
<p>If this happens while Showr is trying to update images or feeds, the update will fail. There&#8217;s not a lot Showr can do to help, but it can give a useful error message. Showr 1.4 will detect when an update fails owing to a captive Wi-Fi, and report that as the update status when you look at the widget settings. This also allows the Smart Update system to better choose when to retry the download, reducing power consumption.</p>
<p>Of course, the same mechanism also detects other networks with no Internet access, such as a locked-down corporate Wi-Fi.</p>
<h2>Helps you out more</h2>
<p>It&#8217;s not always easy to get started with a new app. Much as we&#8217;d like to be there to help in person, there&#8217;s no way we can get to every user. So we did the next best thing, and made Showr offer to help. When you&#8217;ve been using Showr a little while, it&#8217;ll check with you to see how you&#8217;re getting along. If there&#8217;s anything wrong, it can put you in touch with Shadowburst support. And if everything&#8217;s going smoothly, don&#8217;t forget to give Showr a pat on the back by rating it on Google Play. Your review helps other Android users to find Showr, which helps us to develop the app further.</p>
<p>If you haven&#8217;t tried Showr yet, download it now, free from Google Play.</p>
<a href="http://play.google.com/store/apps/details?id=com.shadowburst.showr"><img alt="Get it on Google Play" src="http://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /></a>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/05/27/showr-1-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showr 1.3 brings RSS to your home screen</title>
		<link>http://shadowburst.com/2013/04/29/showr-1-3/</link>
		<comments>http://shadowburst.com/2013/04/29/showr-1-3/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 15:45:36 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=144</guid>
		<description><![CDATA[It seems like no time at all since the last update, but once again a new version of Showr brings the features that users have asked for, as well as being more sensitive to your phone&#8217;s needs and more responsive&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/04/29/showr-1-3/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>It seems like no time at all since the last update, but once again a new version of Showr brings the features that users have asked for, as well as being more sensitive to your phone&#8217;s needs and more responsive to you, the user. If you don&#8217;t already have Showr, <a title="Showr on Google Play" href="https://play.google.com/store/apps/details?id=com.shadowburst.showr" target="_blank">download it now from Google Play</a>.</p>
<h1>RSS and Atom feeds</h1>
<p>The biggest addition really expands what you can do with Showr. You can now use Showr to stay up to date with a webcomic, a <a title="Tumblr" href="http://www.tumblr.com/" target="_blank">Tumblelog on Tumblr</a>, any photostream on <a title="Flickr" href="http://www.flickr.com/" target="_blank">Flickr</a>, or a photo blog. Best of all, because Showr runs on your phone, not someone else&#8217;s &#8220;cloud&#8221;, nobody&#8217;s going to go all &#8220;Google Reader&#8221; and turn it off.</p>
<p>Now, when you create a Showr widget with a <strong>Get image from Internet </strong>source, instead of entering the address of an image, enter the address of an RSS or Atom feed. Showr will download the feed and display the first image it can find from the feed. This is the point where I&#8217;d normally put a screenshot of the new user interface, but there&#8217;s no new screen to shoot! Just enter the address the same way you do in previous versions, and how often you want to update, and Showr does the rest.</p>
<p>If you&#8217;re moving away from Google Reader but your new feed reader isn&#8217;t very good with images, Showr can complement it by putting your favourite webcomic right on your home screen where you can see it. Showr&#8217;s <em>smart updating</em> works with RSS and Atom feeds too. Even if you set it to update more often than the feed is updated, Showr will only download the feed if it has changed, and will only download an image if it has changed.</p>
<p>In more detail: if any item from the feed has an image <em>enclosure</em>, or an HTML summary or description that uses an <code>&lt;img&gt;</code> tag, Showr will download and display the most recent item&#8217;s linked image.</p>
<p>Showr will also set the widget&#8217;s &#8220;website&#8221; to the item&#8217;s link from the feed, so the <strong>Visit website</strong> option on the widget popup menu takes you straight to that photo or blog post. Don&#8217;t forget you can use the <strong>Widget</strong> settings page to tell Showr what to do <strong>When you click the widget</strong>, so you can set your comic to go full-screen with one click, or share an interesting image.</p>
<h1>Kinder to your battery</h1>
<p>Showr 1.3 is more sensitive to your phone&#8217;s needs. When your phone&#8217;s battery is running on fumes, the last thing you need is home screen widgets burning those last electrons, so Showr 1.3 stops updating when your battery is low. At other times, Showr 1.3 is more aware of your phone&#8217;s Internet connection, and can use this to schedule updates better to use less energy.</p>
<h1>Meeting your expectations</h1>
<p>We know that exciting features aren&#8217;t all there is to a product, so Showr 1.3 incorporates some of the latest User Experience research, so even in unusual situations it fulfils your expectations of how it should behave.</p>
<p>When you update a Showr manually (using the <em>action mode</em> in the widget list, or the <strong>Update Now</strong> item in a widget&#8217;s <strong>Source</strong> settings), Showr will update the widget right away, even if you&#8217;re connected to a network you don&#8217;t usually want Showr to use. If the update fails, Showr will try again at the next opportunity (e.g. when you next connect to Internet). Previously, Showr would not let you override the network settings in this way, and if a manual update failed, it would only retry at the next scheduled update time. This change makes it possible to use the manual update feature for control over when widgets update.</p>
<p>Showr 1.2 made it easier to enter image addresses using an NFC tag or QR code. Unfortunately, this change introduced a problem that could cause Showr to close unexpectedly after scanning a QR code. This problem was found with improved internal testing and is fixed in Showr 1.3.</p>
<p>Showr 1.3 declares itself in a <em>User-Agent</em> header when talking to web servers. This probably makes no difference to most users, and is provided for users who are using Showr with their own web or intranet site.</p>
<h1>Paying the bills</h1>
<p>The new RSS and Atom support in Showr 1.3 means you&#8217;ll all be filling your home screens with widgets. Showr 1.3 helps the users who get the most value of Showr to contribute to its development. When you try to create your fourth widget, Showr will first remind you about the benefits of upgrading to <strong>Showr Pro</strong>. Income from Showr Pro sales pays for the development of Showr, and if you already have three widgets, you&#8217;re using it enough that you should contribute.</p>
<p>If you already have four or more widgets from Showr 1.2 or earlier, they will keep working after the update. If you have <em>inactive</em> widgets restored from a backup, Showr gives you an extra two slots so that you can activate them. And if you&#8217;re already supporting Shadowburst as a Showr Pro user, you won&#8217;t see any difference from this change (unless you notice that the <strong>Image source</strong> menu is a little smoother than before).</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/04/29/showr-1-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showr 1.2</title>
		<link>http://shadowburst.com/2013/04/14/showr-1-2/</link>
		<comments>http://shadowburst.com/2013/04/14/showr-1-2/#comments</comments>
		<pubDate>Sun, 14 Apr 2013 11:17:56 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=131</guid>
		<description><![CDATA[The improvements in Showr 1.2 go beyond the boundaries of the app and even the phone, and focus on how Showr fits into your world. This update&#8217;s three headline features have been popular requests from users, so don&#8217;t forget to&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/04/14/showr-1-2/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>The improvements in Showr 1.2 go beyond the boundaries of the app and even the phone, and focus on how Showr fits into your world. This update&#8217;s three headline features have been popular requests from users, so don&#8217;t forget to email your feedback to <tt>support</tt> at this domain. Even if you don&#8217;t know what feature you want, letting us know how you use Showr helps us to make it easier and faster for you.</p>
<h2>Friendlier to your data plan</h2>
<p>Showr 1.2 gives you more control of downloading over mobile networks. If you&#8217;re on a metered data plan, a new setting lets you stop Showr updating images on a mobile network. If you miss an update that way, Showr will update all the images it missed as soon as you connect to a Wi-Fi network.</p>
<p>Even if you&#8217;re on unlimited data, many mobile networks compress images you download. This helps them to save network bandwidth, but it makes JPEG images look bad when updated on a mobile network. By default, Showr 1.2 won&#8217;t update images if they might be compressed this way, to keep your home screen looking good. (That is, on mobile networks it will only download JPEG images if the server uses HTTPS.) Another new setting lets you control this feature.</p>
<p><img class="size-full wp-image-133 alignleft" alt="Pro" src="http://shadowburst.com/wp-content/uploads/2013/04/pro.png" width="64" height="64" />Maybe you use a tablet with a mobile Wi-Fi hotspot, or you don&#8217;t want to update images when you connect to your office Wi-Fi network. Showr 1.2 Pro lets you customize your download settings for each network individually. You can tell it that a Wi-Fi network is really using 3G, or not to use certain Wi-Fi networks at all.</p>
<h2>Google Backup</h2>
<p>Showr 1.2 integrates with the built-in Android backup system. If you have backup turned on in your system settings, Showr will automatically backup all your widget settings and any photos you&#8217;ve taken. It uses the Google backup system or whatever backup transport your device manufacturer included, so your widget settings are just as secure as other data backed up from your device.</p>
<p>If Showr&#8217;s settings are restored but not the home screen&#8217;s settings, Showr can end up with widget settings that don&#8217;t correspond to a widget on the home screen. This might happen after reinstalling Showr, when starting on a new device, or if your home screen app doesn&#8217;t support backup. In this case, Showr 1.2 keeps those settings as <strong>inactive</strong> Showrs. You can activate an inactive Showr by adding a new widget in the usual way and then choosing <strong>Activate inactive widget</strong> from the list of sources. Alternatively, you can delete an inactive Showr by selecting it in the main Showr activity.</p>
<h2>Easier to get started</h2>
<div id="attachment_138" class="wp-caption aligncenter" style="width: 369px"><img class="size-full wp-image-138" alt="screenshot of &quot;Image source&quot; menu" src="http://shadowburst.com/wp-content/uploads/2013/04/sources.png" width="359" height="361" /><p class="wp-caption-text">Now gallery and camera apps on your device can add themselves to this menu directly.</p></div>
<p>Showr 1.2 reduces wear on your fingers by letting you add a new Showr with fewer clicks. All the options for choosing an existing picture or taking a photo now appear in the first menu, along with their apps&#8217; icons to help you go straight to the one you want.</p>
<h2>Easier to manage widgets</h2>
<p>The main Showr activity now uses an &#8220;action mode&#8221;. You can select several widgets and update them all at once with a single tap. The activity also tells you how many Showrs you have.</p>
<div id="attachment_139" class="wp-caption aligncenter" style="width: 810px"><img class="size-full wp-image-139" alt="screenshot" src="http://shadowburst.com/wp-content/uploads/2013/04/action-mode.png" width="800" height="395" /><p class="wp-caption-text">Showr&#8217;s new action mode helps you manage several Showr sources at once.</p></div>
<p>New optimizations in this activity also make it more responsive, and kinder to your battery.</p>
<p>When you&#8217;re changing the URL a Showr downloads from, the dialog now gives you the same options to scan a barcode or NFC tag that were already available when creating a new Showr.</p>
<h2>Get in touch</h2>
<p>Because we want to hear from you, we&#8217;ve made it even easier to get in touch. The main activity and the widget settings now have a menu option that starts composing an email to Shadowburst support. Now if you see anything odd, or want an option but can&#8217;t find it, you can let us know right away (before you forget).</p>
<h2>More reliable</h2>
<p>When creating a <em>Stack Exchange flair</em> widget, returning to the sites list from the users list no longer makes it forget your filter.</p>
<p>Updating an image will now succeed even if the web server reports the MIME type incorrectly or doesn&#8217;t report a type.</p>
<p style="padding-left: 30px;">If you haven&#8217;t tried Showr yet, download it now free from Google Play.</p>
<p style="padding-left: 30px;"><a href="http://play.google.com/store/apps/details?id=com.shadowburst.showr"><img alt="Get it on Google Play" src="http://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/04/14/showr-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New image sources in Showr 1.1</title>
		<link>http://shadowburst.com/2013/03/20/new-image-sources-in-showr-1-1/</link>
		<comments>http://shadowburst.com/2013/03/20/new-image-sources-in-showr-1-1/#comments</comments>
		<pubDate>Wed, 20 Mar 2013 23:40:04 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=113</guid>
		<description><![CDATA[Showr 1.1 went out today on Google Play. This new version adds new sources, including the first integration with a third-party service: Stack Exchange. If you get into trouble with your widgets, the new troubleshooting feature helps you get sorted&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/03/20/new-image-sources-in-showr-1-1/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>Showr 1.1 went out today on <a title="Showr on Google Play" href="https://play.google.com/store/apps/details?id=com.shadowburst.showr">Google Play</a>. This new version adds new sources, including the first integration with a third-party service: Stack Exchange. If you get into trouble with your widgets, the new troubleshooting feature helps you get sorted again. And it&#8217;s easier to view and share downloaded images with the new widget popup menu.</p>
<h2>Camera</h2>
<p>Showr isn&#8217;t <em>just</em> for downloading images from the Internet. You&#8217;ve already seen that it can show an image from your Gallery (or another gallery app you have installed). Now Showr integrates with the built-in camera too. When you create a new Showr widget, tap the <strong>Take a photo</strong> option to do just that. Capture your little one&#8217;s new finger-painting to give you some inspiration later, or just use it as a sticky note on your home screen to save an important notice or signpost without cluttering up the Gallery. Just like any other Showr, from the widget you can view the photo full-screen or share it.</p>
<h2>Stack Exchange</h2>
<p>Stack Exchange is a family of question-and-answer forum sites. You may already know <a href="http://stackoverflow.com/" target="_blank">Stack Overflow</a> for programming questions, or <a href="http://gaming.stackexchange.com/" target="_blank">Arqade</a> for questions about computer games, but there&#8217;s a Stack Exchange site for nearly every topic. Stack Exchange offers a thing called a &#8216;flair&#8217;, which is a little image showing your username on one of their sites, and your &#8216;reputation&#8217; on that site. For instance, here&#8217;s mine from the site for <a href="http://bicycles.stackexchange.com/" target="_blank">Bicycles</a>:</p>
<p><img class="aligncenter" alt="my flair" src="http://bicycles.stackexchange.com/users/flair/3512.png" width="208" height="58" />If you use a Stack Exchange site and you want to see your flair, it&#8217;s usually quite fiddly. First you have to log into your account and view your profile, then find the page about flair, then copy and paste the link into your address bar, or into Showr. With Showr 1.1, it&#8217;s simple. When you add a new Showr to your home screen, the <strong>Stack Exchange</strong> option takes you to a menu of Stack Exchange sites. When you&#8217;ve chosen the site you want, you can enter the name of any user on that site to create a Showr pointing to their flair. It automatically links to the user profile: if the reputation changes unexpectedly, it&#8217;s quick and easy to find out why.</p>
<h2>New ways to work with widgets</h2>
<p>Showr widgets already let you see the information and pictures you want, and with Showr 1.1 they&#8217;re more interactive, too. For newly created Showr widgets, the default action when you click on the Showr is to pop up a menu like this one.</p>
<div id="attachment_114" class="wp-caption aligncenter" style="width: 410px"><a href="http://shadowburst.com/wp-content/uploads/2013/03/popup-menu.png"><img class="size-full wp-image-114" alt="This is the new popup menu in Showr 1.1." src="http://shadowburst.com/wp-content/uploads/2013/03/popup-menu.png" width="400" height="354" /></a><p class="wp-caption-text">The new popup menu in Showr 1.1</p></div>
<ul>
<li><strong>Settings</strong> opens the settings activity for that widget.</li>
<li><strong>Visit website</strong> opens a browser window on the website you set for that widget in the settings. You can use a Showr as a custom website shortcut this way.</li>
<li><strong>View</strong> opens a full-screen Gallery window on the current image, so you can see it full-size and zoom and pan it.</li>
<li><strong>Share image</strong> shares the image just the same way as from the Gallery, Chrome, or any other app. Other apps you&#8217;ve installed, such as image editing tools, can show up on this menu too, if they register the right &#8220;intent&#8221; with the Android system. Now if something funny happens on your favourite webcam, you can share the image with your friends without having to race the next update.</li>
</ul>
<p>The menu is the default click action for new Showr widgets, and you can add it to an existing Showr in the widget settings.</p>
<p>Showr 1.1 introduces the first setting exclusive to Pro users: you can control how the image fits into the widget&#8217;s space. The default option scales the widget to fit inside the space, keeping it the right aspect. If you prefer, you can still keep the right aspect but crop the long ends of the image, to fill up the available space. You could use this if you want to create a Windows Phone-like home screen of tiles.</p>
<h2>Troubleshooting</h2>
<p>The web isn&#8217;t always reliable on a mobile device. Just as you think you&#8217;ve connected, the Wifi cuts out. And then when you find a new connection, the server goes down! With all these possible problems, how can you trust that the information you&#8217;re seeing is up to date?<a href="http://shadowburst.com/wp-content/uploads/2013/03/updated-successfully.png"><img class="aligncenter size-full wp-image-116" alt="&quot;Updated successfully 2 minutes ago, 22:36.&quot;" src="http://shadowburst.com/wp-content/uploads/2013/03/updated-successfully.png" width="627" height="162" /></a></p>
<p>Showr can&#8217;t fix the Internet, but it can make it more trustable. For a Showr that updates over the Internet (including the new Stack Exchange flairs), the settings activity now shows you when it last tried to update the widget, and the result. When an update fails, Showr tries to work out what went wrong, and it&#8217;ll tell you what you can do about it.</p>
<p>The same information that Showr keeps to help troubleshoot also helps it make smart updating even smarter, reducing network and battery use. The troubleshooting information is still experimental in this release: over the next releases, it&#8217;ll learn more about network transfers, how to use them efficiently, and how to fix problems.</p>
<p style="padding-left: 30px;">If you don&#8217;t already have Showr on your Android smartphone or tablet, you can get these features and more by downloading it free from <a title="Showr on Google Play" href="https://play.google.com/store/apps/details?id=com.shadowburst.showr" target="_blank">Google Play</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/03/20/new-image-sources-in-showr-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upsell is not a town in Sweden</title>
		<link>http://shadowburst.com/2013/03/09/upsell-is-not-a-town-in-sweden/</link>
		<comments>http://shadowburst.com/2013/03/09/upsell-is-not-a-town-in-sweden/#comments</comments>
		<pubDate>Sat, 09 Mar 2013 13:51:45 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Design Blog]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=100</guid>
		<description><![CDATA[It&#8217;s the time of year when sons, daughters, and fathers of infants panic, and mothers too wait in uneasy anticipation of getting a breakfast tray tipped all over them in the morning. Florists and chocolatiers rub their hands together in&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/03/09/upsell-is-not-a-town-in-sweden/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s the time of year when sons, daughters, and fathers of infants panic, and mothers too wait in uneasy anticipation of getting a breakfast tray tipped all over them in the morning. Florists and chocolatiers rub their hands together in glee, but even on Mother&#8217;s Day, stock doesn&#8217;t sell itself. So today we&#8217;ll be taking a critical look at an online shopping workflow, with a seasonal example.<span id="more-100"></span></p>
<p>Marks and Spencer (usually known as M&amp;S) is a large and long-lived British retailer that got itself into financial trouble at the turn of the century, and then got itself back out of trouble with the appointment of a new chief executive. They now have a strong &#8220;bricks and clicks&#8221; offering: they combine their high-street stores and their website to get the best of both worlds, and the two work together harmoniously. (To take a quick example: the returns policy is unified between physical and website sales, and you can return online purchases to any M&amp;S store.)</p>
<p>Marks and Spencer is also the website where I buy Mothers&#8217; Day flowers each year. I don&#8217;t have access to their sales figures, but I&#8217;d put money on it being one of their biggest rush periods. So as soon as they get you on their website, they want to draw you into the flow of buying a Mothers&#8217; Day gift.<a href="http://shadowburst.com/wp-content/uploads/2013/03/upsell-front.png"><img class="alignnone size-full wp-image-103" alt="M&amp;S front page as of 8th March 2013" src="http://shadowburst.com/wp-content/uploads/2013/03/upsell-front.png" width="493" height="522" /></a></p>
<p>That&#8217;s a sweet layout, and just what I was looking for. Flowers, the major department, is featured across the whole page width, with other likely gifts spread out underneath it. Below that is the same Spring range they have the rest of the time, so their usual customers can still find what they want. It looks like they&#8217;ve really thought through what their customers want, and made it easy to find it.</p>
<p>But click on the banner and … nothing happens. In fact, only two parts of this huge feature graphic are links: the product images in the little scroller on the left, and the text &#8220;Shop Mother&#8217;s Day flowers &amp; plants &gt;&#8221;. This latter text is what&#8217;s known to e-commerce marketeers as a &#8220;call to action&#8221; (CTA). It&#8217;s the part of the graphic that tells you what to do next. You can see <a title="'Call to Action Buttons' on Smashing Magazine" href="http://www.smashingmagazine.com/2009/10/13/call-to-action-buttons-examples-and-best-practices/" target="_blank">a lot of effective CTA examples on the Smashing Magazine website</a>, but you won&#8217;t find this one in the list. A good CTA is eye-catching and easy to click on. In this graphic, the flower shape on the right would be a better place for that link: it was the first thing I clicked on, because it stands out from its surroundings, and it looks like a button. But you could go one further than that, and make the whole rectangle a link to the flower department. Amazon, for example, always has all of a feature image clickable, even if there are smaller links inside the image for more specific actions.</p>
<p>Eventually, I managed to find the place to click, and shopped for a bouquet. After choosing one, I put it in my basket, and went to &#8220;checkout&#8221;. At least, that&#8217;s where I wanted to go: the site actually took me to <tt>www.marksandspencer.com/upsell</tt>.</p>
<p><a href="http://shadowburst.com/wp-content/uploads/2013/03/upsell-checkout.png"><img class="alignnone size-full wp-image-102" alt="A screen grab of M&amp;S' upselling page" src="http://shadowburst.com/wp-content/uploads/2013/03/upsell-checkout.png" width="496" height="522" /></a></p>
<p>This page stymied me for quite a while. I was expecting to see my checkout taking most of the page, with a big button to start the payment and delivery workflow, but instead I got this mishmash. What&#8217;s going on here?</p>
<p>Upselling is, as the title suggests, not a new IKEA bed; rather, what McDonald&#8217;s does when the cashier asks, &#8220;Would you like fries with that?&#8221; It&#8217;s the process of selling someone an extra, or something more expensive than the thing they initially wanted. Most consumers are savvy to the practice now, and it&#8217;s commonplace on retail websites, but I&#8217;ve never seen it so blatantly described. M&amp;S is taking a huge risk of their technique backfiring by making consumers aware of it. For their Mother&#8217;s Day customers, though, they have nothing to lose. It appears that the &#8220;Continue shopping in&#8221; list is automatically generated, for all six links are to more selections of flowers. Worse yet, of the &#8220;bestselling&#8221; products it tries to upsell, two of them are <strong>cheaper</strong> bouquets than the one I chose! That really would be backfiring.</p>
<p>If you use Amazon often you&#8217;ll remember that their product recommendations used to be quite single-minded. &#8220;You bought <em>Extro</em> by Alfred Bester in paperback. Would you like <em>Extro</em> by Alfred Bester in hardback?&#8221; It&#8217;s a technically hard problem, and one they&#8217;ve only started to solve in the last year or so. M&amp;S isn&#8217;t quite in Amazon&#8217;s league when it comes to automated recommendations, so it&#8217;s unsurprising that they should have the same problem.</p>
<p>Even so, there&#8217;s no law that the upselling page has to be automated. It would be quite a coup for them to manually select some other products or departments to link for just Mothers&#8217; Day flowers. For example, they could show other possible Mothers&#8217; Day gifts—chocolate, or weekends away—in the hopes that I&#8217;ll splurge and spend more than I should. Or, they could adopt the same method their high-street stores use. While you queue for the checkout, you see two kinds of product. One is treats: adverts for premium products or &#8220;executive toys&#8221; that I might buy for myself, as a reward for completing the chore of buying a gift. The other kind includes underwear, socks, and travel insurance: there&#8217;s a good chance I already know I need to buy such a thing, and I&#8217;ll pick it up if it&#8217;s in front of me. Most physical retailers use the same upselling technique, with products appropriate to the type of store. I&#8217;d even suggest that M&amp;S might make more sales if they replaced their automated recommendations with these more traditional, hand-chosen ones: the same kind they already apply their expertise to in every store.</p>
<p>But more crucially, they should attend to my primary goal as a customer: to buy the product(s) I&#8217;ve already chosen. After some seconds of trying to understand the page, I find that the box on the right is what I&#8217;m looking for, and this &#8220;Proceed to checkout&#8221; button (unlike the one I&#8217;ve already clicked) really does take me to the delivery &amp; payment workflow. After I&#8217;ve completed the order, I get the screen below.</p>
<p><a href="http://shadowburst.com/wp-content/uploads/2013/03/upsell-thanks.png"><img class="alignnone size-full wp-image-104" alt="the M&amp;S page you get on completing a transaction" src="http://shadowburst.com/wp-content/uploads/2013/03/upsell-thanks.png" width="495" height="529" /></a></p>
<p>Here&#8217;s a great opportunity for getting me to &#8220;engage&#8221; more with the brand. (That is, to sign up to be marketed at more in future, and to recommend it to my friends.) You can see they&#8217;re pushing me their branded bank account here, and their new iPhone app. If you look back at the previous image, you&#8217;ll notice that the three items at the bottom look familiar: in fact, this whole box, including the newsletter sign-up and the social media links, appears on every page. That&#8217;s pretty standard for telling me things their marketing department thinks are important, but it&#8217;s also pretty restrained. When I get to this page, I&#8217;ve just finished the transaction. I&#8217;m feeling relieved that I&#8217;ve done a chore, and maybe a little worried about money, maybe even feeling some brand loyalty and that I ought to visit the site more often. So now&#8217;s the time to go all-out on this kind of message. Now&#8217;s the time I&#8217;m most likely to want a newsletter, an app, a new credit card, etc.</p>
<p>My only complaint with this page is that there is too much whitespace. It feels like an anti-climax to the shopping experience. If M&amp;S wants to stop me just closing my browser window now, this page should look like the front page of the website. The &#8220;M&amp;S Bank&#8221; advert should be as large as the flowers feature, and don&#8217;t forget the call to action. Better yet, they could be showing me the next gift occasion (Fathers&#8217; Day is on 16th June) and encourage me to get that chore out of the way now.</p>
<p>Department stores and clothes retailers have a unique advantage when it comes to upselling and personal marketing: men and women almost always go through separate checkouts. It&#8217;s easy to put men&#8217;s socks on the checkout in menswear, and ladies&#8217; flimsies on the checkout in ladieswear. Doing it the other way round would be ineffective and a little embarrassing: maybe embarrassing enough to dissuade customers from coming back. (In this case, it&#8217;s only embarrassing in one direction. In physical retailers, most men&#8217;s underwear is bought by women.)</p>
<p>But, if you think about it, online retailers of any sort have exactly the same advantage. I&#8217;ve shopped on the M&amp;S website for more than five years. If they don&#8217;t know I&#8217;m a man by now they need to hire some statisticians. Admittedly, this puts me in a minority among their customers: M&amp;S is a much stronger brand for women than men. Yet what are they showing me on my way out of the store? Ladies&#8217; boots and ladies&#8217; coats. They&#8217;ve made a choice that&#8217;s good for the majority of their customers, when it would be so easy to make the right choice for each customer.</p>
<p>So that&#8217;s our quick tour of personal marketing and upselling techniques in online retail. I think M&amp;S actually doesn&#8217;t come off too badly. They&#8217;ve identified and catered to a seasonal trend, they&#8217;ve taken the opportunity to upsell before I commit to a purchase, and they&#8217;ve offered me brand engagement opportunities.</p>
<p>A retailer lives or dies by its ability to put the right stock in front of the consumer at the right time. M&amp;S has done this in stores for more than a century, and on their website for merely a decade. It&#8217;s entirely natural they&#8217;d be better at one than the other, but if you can carefully apply some of techniques from this article, even you can learn to outperform one of the industry&#8217;s big players.</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/03/09/upsell-is-not-a-town-in-sweden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Owner photo widget 1.1</title>
		<link>http://shadowburst.com/2013/02/28/owner-photo-widget-1-1/</link>
		<comments>http://shadowburst.com/2013/02/28/owner-photo-widget-1-1/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 18:15:00 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=96</guid>
		<description><![CDATA[A recent update to the built-in Contacts app in Android Jelly Bean changed the way applications have to access the &#8220;user profile&#8221; contact. The result of this is that clicking the widget to edit your contact has no effect. Version&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/02/28/owner-photo-widget-1-1/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>A recent update to the built-in Contacts app in Android Jelly Bean changed the way applications have to access the &#8220;user profile&#8221; contact. The result of this is that clicking the widget to edit your contact has no effect. Version 1.1 of the widget fixes this problem, so you continue to have easy access to your profile via <a title="Owner photo widget" href="http://shadowburst.com/products/owner-photo-widget/" target="_blank">Owner photo widget</a>. Version 1.1 will work regardless of whether your Contacts app has updated or not.</p>
<p>Along with this change, there&#8217;s<a title="'How to not lose your phone/tablet' video on YouTube" href="https://www.youtube.com/watch?v=DJRFaR71HfY" target="_blank"> a new YouTube video</a> showing how to install and set up the app. Lock screen widgets can be a little confusing if you haven&#8217;t seen then before, so this video should help you get started with Owner photo widget. Be sure to share the video with all your absent-minded friends!</p>
<p style="padding-left: 30px;">If you haven&#8217;t tried Owner photo widget yet, download it <strong>free</strong> from Google Play, for Android devices running Jelly Bean. <a href="http://play.google.com/store/apps/details?id=com.shadowburst.showr.owner"><img alt="Get it on Google Play" src="http://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/02/28/owner-photo-widget-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Showr 1.0 beta</title>
		<link>http://shadowburst.com/2013/02/19/showr-1-0/</link>
		<comments>http://shadowburst.com/2013/02/19/showr-1-0/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 10:52:05 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Update News]]></category>
		<category><![CDATA[showr]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=92</guid>
		<description><![CDATA[Here at Shadowburst we were very surprised to discover there&#8217;s no app available that lets you input the web address of an image and show it on your home screen. It seems like an everyday sort of thing to want&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/02/19/showr-1-0/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>Here at Shadowburst we were very surprised to discover there&#8217;s no app available that lets you input the web address of an image and show it on your home screen. It seems like an everyday sort of thing to want to do, whether the image is your Stack Overflow flair, a webcam, gaming stats, the latest episode of your favourite webcomic, or a photo of a loved one.</p>
<p>So we made one. Showr is now in open beta, which means that you can help make it awesome: download it, try it out, and email in your feedback to &#8216;support&#8217; at this domain. It&#8217;s such a flexible app, we want to hear about any exciting uses you come up with. And of course, if anything doesn&#8217;t work quite the way you want, we want to know about that too, so we can make you happy.</p>
<p>Get Showr now from Google Play™, and don&#8217;t forget to leave a review: <a href="http://play.google.com/store/apps/details?id=com.shadowburst.showr"><img alt="Get it on Google Play" src="http://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /></a></p>
<p style="padding-left: 30px;"><em>Google Play</em> is a trademark of Google Inc.</p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/02/19/showr-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launch animations</title>
		<link>http://shadowburst.com/2013/02/02/launch-animations/</link>
		<comments>http://shadowburst.com/2013/02/02/launch-animations/#comments</comments>
		<pubDate>Sat, 02 Feb 2013 15:24:06 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Design Blog]]></category>

		<guid isPermaLink="false">http://shadowburst.com/?p=81</guid>
		<description><![CDATA[One of the driving principles behind the design of Shadowburst apps is that every computer should look as attractive as computers do in films. One of the biggest things Android does to get the &#8216;Movie OS&#8217; look is to animate&#8230;<p class="more-link-p"><a class="more-link" href="http://shadowburst.com/2013/02/02/launch-animations/">Read more &#8594;</a></p>]]></description>
				<content:encoded><![CDATA[<p>One of the driving principles behind the design of Shadowburst apps is that every computer should look as attractive as computers do in films. One of the biggest things Android does to get the &#8216;Movie OS&#8217; look is to animate transitions between screens, whether that&#8217;s swiping between tabs, animated scrolling, or sliding menus. Transitions aren&#8217;t just there to be pretty. Just like in the movies themselves, a smooth transition is less visually jarring than a simple cut, and it can help the user to see the relationship between the old and new screens. This article is about the transition between activities.<span id="more-81"></span>In early Android™ versions, the activity transition was simple. A new activity would slide in from the right, with the previous activity sliding out to the left. Pressing <strong>back</strong> would finish the activity by sliding it out to the right, with the previous activity reclaiming the foreground by sliding in from the left. Android had no support for right-to-left locales then, but today you can put the inverted forms of the animations in an <em>anim-rtl</em> directory to use them in right-to-left locales.</p>
<p>It was simple, but it helped to set up the forward/back relationship in the user&#8217;s mind. Mobile GPUs were a lot smaller then, and users tended to turn the animation off because it was often jerky (or &#8220;janky&#8221;, in Android developers&#8217; parlance). Nowadays, with much faster GPUs and a better animation framework, activity transitions are invariably smooth, but this has caused another change.</p>
<p>In more recent Android versions, there is a new animation. New activities grow from the centre of the screen while becoming more opaque. Using <strong>back</strong> to finish an activity makes it go away by the inverse route: it fades out and shrinks towards the centre. This new animation reinforces the idea that the old activity is still present, unchanged, &#8216;behind&#8217; the new activity, but sacrifices the forwards-backwards association. Perhaps the designers assume that users are used to that idea by now.</p>
<p>This new animation, available from API version 16 (Jelly Bean), has an extra benefit: it gives you the freedom to start the new activity growing from somewhere other than the centre. Android uses this extensively to give better feedback when launching a new activity. For example, when you start an activity from an icon on the home screen or the &#8220;All Apps&#8221; menu, the icon grows into the activity. When you return to an activity by clicking it in the &#8220;Recent Apps&#8221; menu, the thumbnail grows and turns into the activity.</p>
<p><a title="The Hat Game" href="http://shadowburst.com/products/the-hat-game/">The Hat Game</a> uses this feature to give extra menu feedback on devices that support it. One example is the Bluetooth item in the action bar. When you click this, the Bluetooth activity starts, by growing out of the button. Again, the idea of this is not just to add &#8220;bling&#8221;, but also to better show that the new activity is a response to the user&#8217;s button-click. The code to add this is incredibly simple, even including the workaround for older devices. It takes advantage of Java&#8217;s late binding of function calls to avoid having to use reflection. The code below is from the main activity.</p>
<pre>@SuppressLint("NewApi")
private void startActivity(Intent i, View source) {
    if (source != null) {
        try {
            Bundle opts = ActivityOptions.makeScaleUpAnimation(
                source,
                0, 0,
                source.getWidth(), source.getHeight()).toBundle();
            startActivity(i, opts);
        } catch (LinkageError e) {
            Rect r = new Rect();
            source.getGlobalVisibleRect(r);
            i.setSourceBounds(r);
            startActivity(i);
        }
    } else {
        startActivity(i);
    }
}</pre>
<p>This function uses the <code>ActivityOptions</code> helper to create the animation options. This class only exists in API version 16 and up. The *minimum* version for this project is 8, but the *target* version is 17, so the package compiles correctly using this later version. The <code>@SuppressLint("NewApi")</code> annotation tells the Android tools not to warn about calling a function newer than the minimum version.</p>
<p>The call isn&#8217;t actually linked until it is called at runtime. When it&#8217;s called, if the JIT finds the class, the call proceeds and returns just like any other function call, so <a title="API reference for ActivityOptions.makeAnimationOptions" href="http://developer.android.com/reference/android/app/ActivityOptions.html#makeScaleUpAnimation(android.view.View,%20int,%20int,%20int,%20int)"><code>makeAnimationOptions</code></a> will return the <code>Bundle</code> necessary for the animation, which is then passed on to <a title="API reference for Context.startActivity" href="http://developer.android.com/reference/android/content/Context.html#startActivity%28android.content.Intent,%20android.os.Bundle%29"><code>startActivity(Intent, Bundle)</code></a> (which also is only available from API 16). On an older version, the JIT will attempt to link the function call, fail to find the class, and throw an error. The function catches the error and calls the older fallback.</p>
<p>This code plays a little fast-and-loose with the JIT, compared to the alternative of checking <a title="API reference for Build.VERSION" href="http://developer.android.com/reference/android/os/Build.VERSION.html"><code>Build.VERSION</code></a>, but it is a little simpler, and has the advantage that you can&#8217;t get the check wrong (for instance, by checking for the wrong version number, or omitting a more specific check for a particular feature). Structuring the code this way incurs practically no overhead when the feature is enabled and only the overhead of taking an exception when the feature is unavailable. Either cost is immeasurably small compared to starting an activity.</p>
<p style="padding-left: 30px;">If you haven&#8217;t yet seen this animation, you can download a free trial of The Hat Game from Google Play™. <a href="http://play.google.com/store/apps/details?id=com.shadowburst.hatgame.satellite"><img alt="Get it on Google Play" src="http://developer.android.com/images/brand/en_generic_rgb_wo_60.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shadowburst.com/2013/02/02/launch-animations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
