<?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>Business &#8211; Wiebe Elsinga</title>
	<atom:link href="http://wiebe-elsinga.com/blog/category/business/feed/" rel="self" type="application/rss+xml" />
	<link>http://wiebe-elsinga.com/blog</link>
	<description>Blog</description>
	<lastBuildDate>Fri, 08 May 2015 11:15:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.1</generator>
	<item>
		<title>Tips on how to improve your ‪Android‬ ‪UX</title>
		<link>http://wiebe-elsinga.com/blog/improve-your-android-ux/</link>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Fri, 08 May 2015 03:59:54 +0000</pubDate>
				<category><![CDATA[AndroidUX Tips]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1786</guid>

					<description><![CDATA[During recent Android app clinics I hosted and/or attended, I started noticing developers/designers implement some common UX flaws and found myself questioning if they know how to do proper UX. Some of those Android applications I&#8217;ve seen are really well thought out from a technical point of view, but lack good UX. So maybe I should share some techniques/tips on how to improve the UX. 1) Analyze Do some analysis on your current (or future) UX design. As designer and/or developer we tend to think we know everything, but we don&#8217;t. Your application may be used differently than you might think. Knowing how users are using or will use your application is valid information in making a good UX design, as the focus is, and always should be, the user. Do usability tests to discover problems or bottle-necks in your design. This can be done by actually sitting down with a user and observe his/her behavior while he/she is using your application or prototype. Use analyzing tools like Google analytics to find how user are using your application, so you know the user focus (or lack of) inside your application. Or just look around how people are using there device to know basic human-device interaction. A good example might be when you application is using the camera as feature. You&#8217;ve probably seen that &#8220;selfiesticks&#8221; are becoming more populair, so your application might be needing front-camera support as well. And finally have a look at user reviews in Google Play. They might supply you with vital information on how to make your users happy (and getting good ratings at the same time). 2) (Re)Think It might be a good idea to have a second (or third) look at your current UX design and re-think. Try to look for these bad UX omens: Additional texts to explain how it elements work. You can&#8217;t document your way out of confusing UX. Novel paradigms. Stick to known patterns, so users feel quickly at ease. FAQ section. The information presented to the user should be obvious and clear. &#8220;Pop-ups&#8221;, like a confirm dialog. Don&#8217;t block the UX. Don&#8217;t say that something is dangerous if you can&#8217;t fix the danger. Do support &#8220;undo&#8221;. Too much information. Keep it simple (is always the hardest to do). So how can you test if your new UX is wel thought out you may ask, well: You might want to prototype your new UX design first in stead of rewriting your app. This is quick and easy to do and can test if your redesign has been improved. Try doing A/B testing so you can compare the new design against your current one. Testing eliminates guesswork and turns &#8220;I think&#8221; into &#8220;I know&#8221;. 3) Adapt As described in the previous section it&#8217;s important to stick to known patterns, so the user can quickly become acquainted with your application features. Adapting platform standards is the way to go. And Google has done a great job with the introduction of Material Design, by suppling us with well thought out UX design patterns. Learn these pattern and apply them to your UX design. One question I get asked a lot is when an application is adapting Material design will it still contain its uniqueness and will my branding survive. My answer is yes. Branding can by maintained by: The application or product icon. Use of colors. And the actual application itself, meaning your brand should be reflected in the application. Let me explain this by giving you an example giving to me by Marie Schweiz about her redesign of the Top Gear application. The succes of Top Gear (brand) is not the cars, but the three guys hosting it and the fun they have with cars. This should be reflected in the UX design, so make if playful. 4) Add It might sounds strange, adding features to transform UX design, but it&#8217;s not. Let me be clear, I&#8217;m not talking about adding more content but adding features like feedback, value and user aid. So you can add: Interaction feedback, which gives the user confidence that he/she is using the content correctly Error feedback, which warns the user and a possible solution. But be careful not to block the user while giving this type of feedback. Loading feedback, which gives the user options, should I wait or just continue. Again don&#8217;t block the user. Action aid, which gives the the user the option to &#8220;undo stupidity&#8221; If you want to know more, you may want to visit: Google Material design introduction User testing explained, part 1 User testing explained, part 2 Android UI/UX website by Taylor Ling Android UI patterns website by Juhani Lehtimäki Udacity course: UX Design for Mobile Developers Google design Youtube channel I really want to thank my friend and colleague Ali Derbane for reviewing this post]]></description>
										<content:encoded><![CDATA[<p>During recent Android app clinics I hosted and/or attended, I started noticing developers/designers implement some common UX flaws and found myself questioning if they know how to do proper UX.<br />
Some of those Android applications I&#8217;ve seen are really well thought out from a technical point of view, but lack good UX.</p>
<p>So maybe I should share some techniques/tips on how to improve the UX.<br />
<span id="more-1786"></span><br />
<center><img width="320" src="http://i.giphy.com/rV4guAJUoU6Vq.gif"/></center></p>
<h3>1) Analyze</h3>
<p>Do some analysis on your current (or future) UX design. As designer and/or developer we tend to think we know everything, but we don&#8217;t. Your application may be used differently than you might think.<br />
Knowing how users are using or will use your application is valid information in making a good UX design, as the focus is, and always should be, the user.  </p>
<ul>
<li><strong>Do usability tests</strong> to discover problems or bottle-necks in your design. This can be done by actually sitting down with a user and observe his/her behavior while he/she is using your application or prototype. </li>
<li><strong>Use analyzing tools</strong> like Google analytics to find how user are using your application, so you know the user focus (or lack of) inside your application.</li>
<li>Or just <strong>look around</strong> how people are using there device to know basic human-device interaction. A good example might be when you application is using the camera as feature. You&#8217;ve probably seen that &#8220;selfiesticks&#8221; are becoming more populair, so your application might be needing front-camera support as well.</li>
<li>And finally have a <strong>look at user reviews</strong> in Google Play. They might supply you with vital information on how to make your users happy (and getting good ratings at the same time).</li>
</ul>
<p></p>
<h3>2) (Re)Think</h3>
<p>It might be a good idea to have a second (or third) look at your current UX design and re-think.<br />
Try to look for these bad UX omens:</p>
<ul>
<li><em>Additional texts</em> to explain how it elements work. You can&#8217;t document your way out of confusing UX.</li>
<li><em>Novel paradigms</em>. Stick to known patterns, so users feel quickly at ease.</li>
<li><em>FAQ section</em>. The information presented to the user should be obvious and clear.</li>
<li><em>&#8220;Pop-ups&#8221;</em>, like a confirm dialog. Don&#8217;t block the UX. Don&#8217;t say that something is dangerous if you can&#8217;t fix the danger. Do support &#8220;undo&#8221;.</li>
<li><em>Too much information</em>. Keep it simple (is always the hardest to do).</li>
</ul>
<p>
So how can you test if your new UX is wel thought out you may ask, well:</p>
<ul>
<li>You might want to <strong>prototype</strong> your new UX design first in stead of rewriting your app. This is quick and easy to do and can test if your redesign has been improved. </li>
<li>Try doing <strong>A/B testing</strong> so you can compare the new design against your current one. Testing eliminates guesswork and turns &#8220;I think&#8221; into &#8220;I know&#8221;.</li>
</ul>
<p></p>
<h3>3) Adapt</h3>
<p>As described in the previous section it&#8217;s important to stick to known patterns, so the user can quickly become acquainted with your application features.<br />
Adapting platform standards is the way to go. And Google has done a great job with the introduction of Material Design, by suppling us with well thought out UX design patterns.<br />
Learn these pattern and apply them to your UX design.<br />
One question I get asked a lot is when an application is adapting Material design will it still contain its uniqueness and will my branding survive. My answer is yes.<br />
<center><img width="320" src="http://i.giphy.com/12nuDeDV4xU3yE.gif"/></center><br />
Branding can by maintained by: </p>
<ul>
<li>The application or product icon.</li>
<li>Use of colors. </li>
<li>And the actual application itself, meaning your brand should be reflected in the application. </li>
</ul>
<p>
Let me explain this by giving you an example giving to me by <a href="https://plus.google.com/+MarieSchweiz" target="_blank">Marie Schweiz</a> about her redesign of the Top Gear application.<br />
The succes of <a href="http://www.topgear.com/">Top Gear</a> (brand) is not the cars, but the three guys hosting it and the fun they have with cars. This should be reflected in the UX design, so make if playful.<br />
</p>
<h3>4) Add</h3>
<p>It might sounds strange, adding features to transform UX design, but it&#8217;s not. Let me be clear, I&#8217;m not talking about adding more content but adding features like feedback, value and user aid.<br />
So you can add:</p>
<table>
<tr>
<td style="vertical-align:middle">
			<video src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015095543.mp4" id="id0" width="200" onMouseOver="id0.play()" onMouseOut="id0.pause()" onclick="window.location='http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015095543.mp4';id0.pause()" loop></video>
		</td>
<td style="vertical-align:middle">
			<strong>Interaction feedback</strong>, which gives the user confidence that he/she is using the content correctly
		</td>
</tr>
<tr>
<td style="vertical-align:middle">
			<a href="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015102326.png" rel="lightbox[1786]" title="Tips on how to improve your ‪Android‬ ‪UX"><br />
				<img src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015102326.png" width="300" class="aligncenter" /><br />
			</a>
		</td>
<td style="vertical-align:middle">
			<strong>Error feedback</strong>, which warns the user and a possible solution. But be careful not to block the user while giving this type of feedback.
		</td>
</tr>
<tr>
<td style="vertical-align:middle">
			<video src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015102824.mp4" id="id3" width="200" onMouseOver="id3.play()" onMouseOut="id3.pause()" onclick="window.location='http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015102824.mp4';id3.pause()" loop></video>
		</td>
<td style="vertical-align:middle">
			<strong>Loading feedback</strong>, which gives the user options, should I wait or just continue. Again don&#8217;t block the user.
		</td>
</tr>
<tr>
<td style="vertical-align:middle">
			<video src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015104350.mp4" id="id4" width="200" onMouseOver="id4.play()" onMouseOut="id4.pause()" onclick="window.location='http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015104350.mp4';id4.pause()" loop></video>
		</td>
<td style="vertical-align:middle">
			<strong>Action aid</strong>, which gives the the user the option to &#8220;undo stupidity&#8221;
		</td>
</tr>
</table>
<p>If you want to know more, you may want to visit:</p>
<ul>
<li><a href="http://www.google.com/design/spec/material-design/introduction.html" target="_blank">Google Material design introduction</a></li>
<li><a href="http://thenextweb.com/creativity/2015/04/27/user-testing-explained/" target="_blank">User testing explained, part 1</a></li>
<li><a href="http://thenextweb.com/dd/2015/04/28/user-testing-explained-part-two/" target="_blank">User testing explained, part 2</a></li>
<li><a href="http://androiduiux.com/" target="_blank">Android UI/UX</a> website by <a href="https://plus.google.com/+TaylorLing" target="_blank">Taylor Ling</a></li>
<li><a href="http://www.androiduipatterns.com/ http://www.androiduipatterns.com/" target="_blank">Android UI patterns</a> website by <a href="https://plus.google.com/+JuhaniLehtimäki" target="_blank">Juhani Lehtimäki</a></li>
<li>Udacity course: <a href="https://www.udacity.com/wiki/ud849" target="_blank">UX Design for Mobile Developers</a></li>
<li><a href="https://www.youtube.com/channel/UClKO7be7O9cUGL94PHnAeOA" target="_blank">Google design Youtube channel</a></li>
</ul>
<p>
I really want to thank my friend and colleague <a href="https://plus.google.com/+AliDerbane" target="_blank">Ali Derbane</a> for reviewing this post </p>
]]></content:encoded>
					
		
		<enclosure url="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015095543.mp4" length="1161987" type="video/mp4" />
<enclosure url="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015102824.mp4" length="603187" type="video/mp4" />
<enclosure url="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/05/shamuLMY47DWiebe05082015104350.mp4" length="1593388" type="video/mp4" />

			</item>
		<item>
		<title>What’s new in Android Testing</title>
		<link>http://wiebe-elsinga.com/blog/whats-new-in-android-testing/</link>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Thu, 09 Apr 2015 02:20:09 +0000</pubDate>
				<category><![CDATA[AndroidDev Tips]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[espresso]]></category>
		<category><![CDATA[testing]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1755</guid>

					<description><![CDATA[During Droidcon Italy Stephan Linzner from Google explained upcoming features in the Android Testing Support Library. Lets have a closer look at some: Test Filtering If you want to suppress a test to run on certain target Api levels, just add the @SdkSuppress annotation. @SdkSuppress&#40;minSdkVersion=15&#41; @Test public void featureWithMinSdk15&#40;&#41; &#123; &#160; ... &#125; You can also filter tests to only run on a (physical) device by adding the @RequiresDevice annotation. @RequiresDevice @Test public void SomeDeviceSpecificFeature&#40;&#41; &#123; &#160; ... &#125; ActivityTestRule Because ActivityInstrumentationTestCase2 will become deprecated you need to define a @Rule. Rules allow very flexible addition or redefinition of the behavior of each test method in a test class https://github.com/junit-team/junit/wiki/Rules So in your test add a @Rule annotation, and create an ActivityTestRule for your Activity @RunWith&#40;AndroidJUnit4.class&#41; @LargeTest public class ChangeTextBehaviorTest &#123; &#160; &#160; ... &#160; &#160; @Rule &#160; &#160; public ActivityTestRule&#60;MainActivity&#62; mActivityRule = new ActivityTestRule&#60;&#62;&#40;MainActivity.class&#41;; &#160; &#160; @Test &#160; &#160; public void changeText_sameActivity&#40;&#41; &#123; &#160; &#160; &#160; &#160; // Type text and then press the button. &#160; &#160; &#160; &#160; onView&#40;withId&#40;R.id.editTextUserInput&#41;&#41;.perform&#40;typeText&#40;STRING_TO_BE_TYPED&#41;, closeSoftKeyboard&#40;&#41;&#41;; &#160; &#160; &#160; &#160; onView&#40;withId&#40;R.id.changeTextBt&#41;&#41;.perform&#40;click&#40;&#41;&#41;; &#160; &#160; &#160; &#160; // Check that the text was changed. &#160; &#160; &#160; &#160; onView&#40;withId&#40;R.id.textToBeChanged&#41;&#41;.check&#40;matches&#40;withText&#40;STRING_TO_BE_TYPED&#41;&#41;&#41;; &#160; &#160; &#125; &#125; Now create your ActivityTestRule public class ActivityTestRule&#60;T extends Activity&#62; &#123; &#160; &#160; public T getActivity&#40;&#41; &#123;&#125; &#160; &#160; protected Intent getActivityIntent&#40;&#41; &#123;&#125; &#160; &#160; protected void beforeActivityLaunched&#40;&#41; &#123;&#125; &#160; &#160; protected void afterActivityFinished&#40;&#41; &#123;&#125; &#125; Espresso-Intents Espresso-Intents is like Mockito but for Intent, basically hermetic inter-app testing. To give you an example, lets say in your application when a user presses a &#8220;call&#8221; button, you want to know if the correct data will be send to the Intent.ACTION_CALL. So first create an IntentsTestRule and then verify that the Intent was sent using Espresso-Intents @RunWith&#40;AndroidJUnit4.class&#41; @LargeTest public class DialerActivityTest &#123; &#160; &#160; ... &#160; &#160; @Rule &#160; &#160; public IntentsTestRule&#60;DialerActivity&#62; mRule = new IntentsTestRule&#60;&#62;&#40;DialerActivity.class&#41;; &#160; &#160; @Test &#160; &#160; public void typeNumber_ValidInput_InitiatesCall&#40;&#41; &#123; &#160; &#160; &#160; &#160; onView&#40;withId&#40;R.id.edit_text_caller_number&#41;&#41;.perform&#40;typeText&#40;VALID_PHONE_NUMBER&#41;, &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; closeSoftKeyboard&#40;&#41;&#41;; &#160; &#160; &#160; &#160; onView&#40;withId&#40;R.id.button_call_number&#41;&#41;.perform&#40;click&#40;&#41;&#41;; &#160; &#160; &#160; &#160; intended&#40;allOf&#40; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; hasAction&#40;is&#40;equalTo&#40;Intent.ACTION_CALL&#41;&#41;&#41;, &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; hasData&#40;equalTo&#40;INTENT_DATA_PHONE_NUMBER&#41;&#41;, &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; toPackage&#40;PACKAGE_ANDROID_DIALER&#41;&#41;&#41;; &#160; &#160; &#125; &#125; So now you know&#8230; All code can be found in android-testing github: ActivityTestRule Sample IntentsBasicSample General Espresso Github samples by Google Thanks Stephan Linzner for the resources. #HappyTesting]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/DroidconIT.jpg" width="4096" height="3040" class="aligncenter size-full wp-image-1779" data-wp-pid="1779" srcset="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/DroidconIT.jpg 4096w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/DroidconIT-300x223.jpg 300w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/DroidconIT-1024x760.jpg 1024w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/DroidconIT-800x594.jpg 800w" sizes="(max-width: 4096px) 100vw, 4096px" /></p>
<p>During Droidcon Italy <a href="https://plus.google.com/+StephanLinzner">Stephan Linzner</a> from Google explained upcoming features in the <a href="https://developer.android.com/tools/support-library/index.html">Android Testing Support Library</a>. Lets have a closer look at some:<br />
<span id="more-1755"></span><br />
</p>
<h3>Test Filtering</h3>
<p>If you want to suppress a test to run on certain target Api levels, just add the <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">@</span>SdkSuppress</span></code> annotation.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">@SdkSuppress<span style="color: #009900;">&#40;</span>minSdkVersion<span style="color: #339933;">=</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><br />
@Test<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> featureWithMinSdk15<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; ...<br />
<span style="color: #009900;">&#125;</span></div></div>
<p>You can also filter tests to only run on a (physical) device by adding the <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">@</span>RequiresDevice</span></code> annotation.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">@RequiresDevice<br />
@Test<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> SomeDeviceSpecificFeature<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; ...<br />
<span style="color: #009900;">&#125;</span></div></div>
<p></p>
<h3>ActivityTestRule</h3>
<p>Because <code class="codecolorer bash default"><span class="bash">ActivityInstrumentationTestCase2</span></code> will become deprecated you need to define a <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">@</span>Rule.</span></code></p>
<blockquote><p>Rules allow very flexible addition or redefinition of the behavior of each test method in a test class</p></blockquote>
<div align="right" ><small>https://github.com/junit-team/junit/wiki/Rules</small></div>
<p>
So in your test add a <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">@</span>Rule</span></code> annotation, and create an <code class="codecolorer bash default"><span class="bash">ActivityTestRule</span></code> for your Activity</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">@RunWith<span style="color: #009900;">&#40;</span>AndroidJUnit4.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><br />
@LargeTest<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ChangeTextBehaviorTest <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; ...<br />
<br />
&nbsp; &nbsp; @Rule<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> ActivityTestRule<span style="color: #339933;">&lt;</span>MainActivity<span style="color: #339933;">&gt;</span> mActivityRule <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ActivityTestRule<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#40;</span>MainActivity.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; @Test<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> changeText_sameActivity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Type text and then press the button.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">editTextUserInput</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>typeText<span style="color: #009900;">&#40;</span>STRING_TO_BE_TYPED<span style="color: #009900;">&#41;</span>, closeSoftKeyboard<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">changeTextBt</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Check that the text was changed.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">textToBeChanged</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">check</span><span style="color: #009900;">&#40;</span>matches<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span>STRING_TO_BE_TYPED<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Now create your <code class="codecolorer bash default"><span class="bash">ActivityTestRule</span></code></p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ActivityTestRule<span style="color: #339933;">&lt;</span>T <span style="color: #000000; font-weight: bold;">extends</span> Activity<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> T getActivity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">protected</span> Intent getActivityIntent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> beforeActivityLaunched<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> afterActivityFinished<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p></p>
<h3>Espresso-Intents</h3>
<p>Espresso-Intents is like <a href="http://site.mockito.org/">Mockito</a> but for Intent, basically hermetic inter-app testing.<br />
To give you an example, lets say in your application when a user presses a &#8220;call&#8221; button, you want to know if the correct data will be send to the <code class="codecolorer bash default"><span class="bash">Intent.ACTION_CALL</span></code>. </p>
<p><img loading="lazy" src="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/EspressoIntent.png" alt="EspressoIntent" width="1067" height="573" class="aligncenter size-full wp-image-1768" data-wp-pid="1768" srcset="http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/EspressoIntent.png 1067w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/EspressoIntent-300x161.png 300w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/EspressoIntent-1024x550.png 1024w, http://wiebe-elsinga.com/blog/wp-content/uploads/2015/04/EspressoIntent-800x430.png 800w" sizes="(max-width: 1067px) 100vw, 1067px" /></p>
<p>So first create an <code class="codecolorer bash default"><span class="bash">IntentsTestRule</span></code> and then verify that the Intent was sent using Espresso-Intents</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">@RunWith<span style="color: #009900;">&#40;</span>AndroidJUnit4.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><br />
@LargeTest<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> DialerActivityTest <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; ...<br />
&nbsp; &nbsp; @Rule<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> IntentsTestRule<span style="color: #339933;">&lt;</span>DialerActivity<span style="color: #339933;">&gt;</span> mRule <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> IntentsTestRule<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#40;</span>DialerActivity.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; @Test<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> typeNumber_ValidInput_InitiatesCall<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">edit_text_caller_number</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>typeText<span style="color: #009900;">&#40;</span>VALID_PHONE_NUMBER<span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; closeSoftKeyboard<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">button_call_number</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; intended<span style="color: #009900;">&#40;</span>allOf<span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasAction<span style="color: #009900;">&#40;</span>is<span style="color: #009900;">&#40;</span>equalTo<span style="color: #009900;">&#40;</span>Intent.<span style="color: #006633;">ACTION_CALL</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hasData<span style="color: #009900;">&#40;</span>equalTo<span style="color: #009900;">&#40;</span>INTENT_DATA_PHONE_NUMBER<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toPackage<span style="color: #009900;">&#40;</span>PACKAGE_ANDROID_DIALER<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p></br><br />
So now you know&#8230;<br />
<br />
All code can be found in <a href="https://github.com/googlesamples/android-testing">android-testing github</a>:</p>
<ul>
<li><a href="https://github.com/googlesamples/android-testing/tree/master/espresso/BasicSample">ActivityTestRule Sample</a></li>
<li><a href="https://github.com/googlesamples/android-testing/tree/master/espresso/IntentsBasicSample">IntentsBasicSample</a></li>
<li><a href="">General Espresso Github samples by Google</a></li>
</ul>
<p>
Thanks <a href="https://plus.google.com/+StephanLinzner">Stephan Linzner</a> for the resources. #HappyTesting</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Hitchhiker&#8217;s guide to Android Testing, part 2: Espresso</title>
		<link>http://wiebe-elsinga.com/blog/the-hitchhikers-guide-to-android-testing-part-2-espresso/</link>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Fri, 03 Apr 2015 02:04:02 +0000</pubDate>
				<category><![CDATA[AndroidDev Tips]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AndroidDev]]></category>
		<category><![CDATA[espresso]]></category>
		<category><![CDATA[testing]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1711</guid>

					<description><![CDATA[As mentioned in the first article Ali Derbane and me wrote about Android Functional Testing, there are a lot of frameworks you can use. In this second part of the journey I will be explaining the functional testing framework called Espresso. So now you know a bit more about Espresso. If you want to know more, you may want to visit: Espresso website Github repo corresponding to this article General Espresso Github samples by Google Updated (08-04) When running the tests with gradle you can just use gradle connectedAndroidTest]]></description>
										<content:encoded><![CDATA[<p>As mentioned in the <a href="http://www.technotalkative.com/part-10-the-hitchhikers-guide-to-android-testing/">first article</a> <a href="https://plus.google.com/+AliDerbane">Ali Derbane</a> and me wrote about Android Functional Testing, there are a lot of frameworks you can use. In this second part of the journey I will be explaining the functional testing framework called <a href="https://code.google.com/p/android-test-kit/">Espresso</a>.<br />
<span id="more-1711"></span><br />
<img src="http://i.giphy.com/VtFd68Pr19fYk.gif" width=100%" /></p>
<h3>Introduction</h3>
<p>Introduced at the GTAC in 2013, Espresso is designed to be used in environments where the developers write their own tests, and makes it possible to write concise, beautiful, and reliable Android UI tests quickly.<br />
Espresso has several general components:</p>
<ul>
<li>The <code class="codecolorer bash default"><span class="bash">Espresso</span></code> class offers the <code class="codecolorer bash default"><span class="bash">onView</span></code> and <code class="codecolorer bash default"><span class="bash">onData</span></code> methods which, alone, can be used for a good numbers of possible tests on a given interface.</li>
<li><code class="codecolorer bash default"><span class="bash">ViewMatchers</span></code> contains a collection of objects that implements the interface <code class="codecolorer bash default"><span class="bash">Matcher <span style="color: #000000; font-weight: bold;">&lt;</span>? super View<span style="color: #000000; font-weight: bold;">&gt;</span></span></code>. Using this Class you can collect and check View elements. For example, getting a View element (Button) with text &#8220;7&#8221;.</li>
<li><code class="codecolorer bash default"><span class="bash">ViewActions</span></code> contains a collection of <code class="codecolorer bash default"><span class="bash">viewAction</span></code> objects to perform actions on a view. These actions are passed to the method <code class="codecolorer bash default"><span class="bash">ViewInteraction.perform</span></code> and may contain multiple actions. For example, clicking on a View element (Button).</li>
<li><code class="codecolorer bash default"><span class="bash">ViewAssertions</span></code> contains a collection of <code class="codecolorer bash default"><span class="bash">ViewAssertion</span></code> to conduct checks on views. </li>
</ul>
<p>
To illustrate these components a test can look like this:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&nbsp; Espresso.<span style="color: #006633;">onView</span><span style="color: #009900;">&#40;</span>ViewMatchers.<span style="color: #006633;">withText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;7&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>ViewActions.<span style="color: #006633;">click</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; Espresso.<span style="color: #006633;">onView</span><span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">check</span><span style="color: #009900;">&#40;</span>ViewAssertions.<span style="color: #006633;">matches</span><span style="color: #009900;">&#40;</span>ViewMatchers.<span style="color: #006633;">withText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;42&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>And the good news, as of last year Google has introduced a <a href="https://developer.android.com/tools/support-library/index.html">Testing Support Library</a> containing Espresso. So lets start by implementing Espresso.</p>
<div style="background: lightgray; padding: 12pt;">To illustrate, we are going to write some tests that tests agains a <a href="https://github.com/welsinga/sample_espresso/app">Android calculator application</a>. The common test scenario we will be implementing is testing if <em>‘6’ x ‘7’ equals ‘42’</em>.</div>
<p>&nbsp;&nbsp;</p>
<h3>Define the test runner</h3>
<p>To use Espresso we first need to define who is running the tests. Espresso uses a new runner named <code class="codecolorer bash default"><span class="bash">AndroidJUnitRunner</span></code>. This runner, based on <code class="codecolorer bash default"><span class="bash">InstrumentationTestRunner</span></code> and <code class="codecolorer bash default"><span class="bash">GoogleInstrumentationTestRunner</span></code>, runs <em>JUnit3</em> and <em>JUnit4</em> tests against your Android application.</p>
<p>First add the dependencies to your <code class="codecolorer bash blackboard"><span class="bash">build.gradle</span></code>, assuming you have installed the <a href="https://developer.android.com/tools/support-library/index.html">Testing Support Library</a>.</p>
<div class="codecolorer-container groovy blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">dependencies <span style="color: #66cc66;">&#123;</span><br />
&nbsp; androidTestCompile <span style="color: #ff0000;">'com.android.support.test:testing-support-lib:0.1'</span><br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>Then add the runner in your build.gradle<code class="codecolorer groovy default"><span class="groovy">android.<span style="color: #006600;">defaultConfig</span></span></code> configuration:</p>
<div class="codecolorer-container groovy blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">defaultConfig <span style="color: #66cc66;">&#123;</span><br />
&nbsp; ...<br />
&nbsp; <span style="color: #006600;">testInstrumentationRunner</span> <span style="color: #ff0000;">&quot;android.support.test.runner.AndroidJUnitRunner&quot;</span><br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>&nbsp;&nbsp;</p>
<h3>Writing the test</h3>
<p>As you may know test classes must be in <code class="codecolorer bash default"><span class="bash">src\androidTest\com.example.package.tests</span></code>, com.example.package being the package specified in the package attribute of the manifest element in the <code class="codecolorer bash default"><span class="bash">AndroidManifest</span></code> file.&nbsp;<br />
Also each test class must extend the abstract class <code class="codecolorer bash default"><span class="bash">ActivityInstrumentationTestCase2</span></code> and supply the Test Activity as generic type that will be used by default for testing.<br />
It must also be passed to the superclass via the <code class="codecolorer bash default"><span class="bash">super<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></span></code>. To make the Test Activity being called by the test framework, simply define a setup which calls the synchronous method <code class="codecolorer bash default"><span class="bash">getActivity<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>.</span></code></p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FunctionalInstrumentationTest <span style="color: #000000; font-weight: bold;">extends</span> ActivityInstrumentationTestCase2<span style="color: #339933;">&lt;</span>ActivityToTest<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> FunctionalInstrumentationTest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span>ActivityToTest.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000066; font-weight: bold;">void</span> setUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+exception"><span style="color: #003399;">Exception</span></a> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">setUp</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; getActivity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>As mentioned we want to check if <em>‘6’ x ‘7’ equals ‘42’</em>.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> testAnswer_to_the_Ultimate_Question_of_Life_the_Universe_and_Everything<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;7&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;×&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;6&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">resText</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">check</span><span style="color: #009900;">&#40;</span>matches<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;42&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>You may have noticed, this example is using static imports. This is solely done to make the code more readable.</p>
<p>Other actions you want to use are:</p>
<ul>
<li><code class="codecolorer java default"><span class="java">pressBack<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> to simulate the use of the &#8220;back&#8221; button,</li>
<li><code class="codecolorer java default"><span class="java">isDisplayed<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> to check if an element is being shown and </li>
<li><code class="codecolorer java default"><span class="java">scrollTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code> to scroll to an element.</li>
</ul>
<p>&nbsp;&nbsp;</p>
<h3>Running the test</h3>
<p>Now lets do the fun part, lets run the test. This can be done from the command line with he command line with <code class="codecolorer bash blackboard"><span class="bash">gradle connectedAndroidTest</span></code> or using Android Studio by:</p>
<ol>
<li><em>Open Run menu | Edit Configurations</em></li>
<li><em>Add a new Android Tests configuration</em></li>
<li><em>Choose the module you are testing</em></li>
<li><em>Define our test runner: <code class="codecolorer bash default"><span class="bash">android.support.test.runner.AndroidJUnitRunner</span></code></em></li>
</ol>
<p>	<br />
<img src="http://i.giphy.com/10OjZwNlstPj9e.gif" width=100%"/><br />
<br />	<br />
So now you know a bit more about Espresso. If you want to know more, you may want to visit:</p>
<ul>
<li><a href="https://code.google.com/p/android-test-kit/">Espresso website</a></li>
<li><a href="https://github.com/welsinga/sample_espresso">Github repo corresponding to this article</a></li>
<li><a href="https://github.com/googlesamples/android-testing">General Espresso Github samples by Google</a></li>
</ul>
<p>
<strong>Updated</strong> (08-04) When running the tests with gradle you can just use <code class="codecolorer bash blackboard"><span class="bash">gradle connectedAndroidTest</span></code></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Archive addition Android artifacts with Gradle.</title>
		<link>http://wiebe-elsinga.com/blog/archive-addition-android-artifacts-with-gradle/</link>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Fri, 20 Mar 2015 06:42:19 +0000</pubDate>
				<category><![CDATA[AndroidDev Tips]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[javadoc]]></category>
		<category><![CDATA[Proguard]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1651</guid>

					<description><![CDATA[When building Android applications or libraries common practice is to save your artifacts to a local file storage or repo. Beside your APK there are some additional artifacts you want/need to save, and you want gradle to do this. Most common ones are Javadoc, your source files and perhaps your proguard generated files like the mapping file. I naturally wanted a Gradle task to handle this. So lets have a look as some tasks you may want to use. Adding Javadoc archive tasks The following will add tasks to generate Javadocs for each build type and assemble it into a jar archive . 123456789101112131415161718192021222324252627282930313233343536android.applicationVariants.all &#123; variant -&#62; &#160; &#160; project.task&#40;&#34;${variant.name.capitalize()}Javadoc&#34;, type: Javadoc&#41; &#123; &#160; &#160; &#160; &#160; destinationDir = new File&#40;&#34;$project.buildDir/javadoc/$variant.name&#34;&#41; &#160; &#160; &#160; &#160; source = variant.javaCompile.source &#160; &#160; &#160; &#160; ext.androidJar = &#34;${project.android.sdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar&#34; &#160; &#160; &#160; &#160; classpath = project.files&#40;variant.javaCompile.classpath.files&#41; + project.files&#40;ext.androidJar&#41; &#160; &#160; &#160; &#160; options &#123; &#160; &#160; &#160; &#160; &#160; &#160; linksOffline&#40;&#34;http://d.android.com/reference&#34;, &#34;${project.android.sdkDirectory}/docs/reference&#34;&#41; &#160; &#160; &#160; &#160; &#160; &#160; links&#40;&#34;http://docs.oracle.com/javase/7/docs/api/&#34;&#41;; &#160; &#160; &#160; &#160; &#160; &#160; setMemberLevel&#40;JavadocMemberLevel.PACKAGE&#41; &#160; &#160; &#160; &#160; &#160; &#160; docEncoding = 'UTF-8' &#160; &#160; &#160; &#160; &#160; &#160; encoding = 'UTF-8' &#160; &#160; &#160; &#160; &#160; &#160; charSet = 'UTF-8' &#160; &#160; &#160; &#160; &#125; &#160; &#160; &#160; &#160; exclude '**/BuildConfig.java' &#160; &#160; &#160; &#160; exclude '**/R.java' &#160; &#160; &#125; &#160; &#160; project.task&#40;&#34;generate${variant.name.capitalize()}JavadocJar&#34;, type: Jar, dependsOn: &#34;${variant.name.capitalize()}Javadoc&#34;&#41; &#123; &#160; &#160; &#160; &#160; classifier 'javadoc' &#160; &#160; &#160; &#160; description = 'Assembles a jar archive containing the generated Javadoc API documentation of $variant.name.' &#160; &#160; &#160; &#160; destinationDir = new File&#40;&#34;$project.buildDir/libs/&#34;&#41; &#160; &#160; &#160; &#160; exclude '**/BuildConfig.class' &#160; &#160; &#160; &#160; exclude '**/R.class' &#160; &#160; &#160; &#160; from &#34;$project.buildDir/javadoc/$variant.name&#34; &#160; &#160; &#125; &#125; When added to your build.gradle file, generate your Javadoc jar archive from the command line with gradle generateReleaseJavadocJar. Adding Source archive tasks The following will add tasks to assemble a jar archive containing the Java sources. 123456789101112131415android.applicationVariants.all &#123; variant -&#62; &#160; &#160; project.task&#40;&#34;generate${variant.name.capitalize()}SourcesJar&#34;, type: Jar&#41; &#123; &#160; &#160; &#160; &#160; classifier = 'sources' &#160; &#160; &#160; &#160; description = 'Assembles a jar archive containing the main sources of $variant.name..' &#160; &#160; &#160; &#160; destinationDir = new File&#40;&#34;$project.buildDir/libs/&#34;&#41; &#160; &#160; &#160; &#160; // exclude generated files &#160; &#160; &#160; &#160; exclude '**/BuildConfig.java' &#160; &#160; &#160; &#160; exclude '**/R.java' &#160; &#160; &#160; &#160; from variant.javaCompile.source &#160; &#160; &#125; &#125; When added to your build.gradle file, generate your Sources jar archive from the command line with gradle generateReleaseSourcesJar. Adding Proguard archive tasks The following will add tasks to assemble a zip archive containing the generated proguard files. 12345678910android.applicationVariants.all &#123; variant -&#62; &#160; &#160; project.task&#40;&#34;generate${variant.name.capitalize()}ProguardFilesJar&#34;, type: Zip&#41; &#123; &#160; &#160; &#160; &#160; classifier 'proguard' &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; description = 'Assembles a jar archive containing the Proguard files of $variant.name..' &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; destinationDir = new File&#40;&#34;$project.buildDir/libs/&#34;&#41; &#160; &#160; &#160; &#160; from &#34;$project.buildDir/outputs/mapping&#34; &#160; &#160; &#125; &#160; &#160; &#125; When added to your build.gradle file, generate your Proguard zip archive from the command line with gradle generateReleaseProguardFilesJar.]]></description>
										<content:encoded><![CDATA[<p>When building Android applications or libraries common practice is to save your artifacts to a local file storage or repo.</p>
<p>Beside your APK there are some additional artifacts you want/need to save, and you want gradle to do this. Most common ones are Javadoc, your source files and perhaps your <a href="http://proguard.sourceforge.net/">proguard</a> generated files like the mapping file.</p>
<p>I naturally wanted a Gradle task to handle this. So lets have a look as some tasks you may want to use.<br />
</p>
<h3>Adding Javadoc archive tasks</h3>
<p>The following will add tasks to generate Javadocs for each build type and assemble it into a jar archive .</p>
<div class="codecolorer-container groovy blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">android.<span style="color: #006600;">applicationVariants</span>.<span style="color: #006600;">all</span> <span style="color: #66cc66;">&#123;</span> variant <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; project.<span style="color: #006600;">task</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;${variant.name.capitalize()}Javadoc&quot;</span>, type: Javadoc<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; destinationDir <span style="color: #66cc66;">=</span> <a href="http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20new"><span style="color: #000000; font-weight: bold;">new</span></a> <a href="http://www.google.de/search?as_q=File&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1%2E5%2E0%2Fdocs%2Fapi%2F"><span style="color: #aaaadd; font-weight: bold;">File</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;$project.buildDir/javadoc/$variant.name&quot;</span><span style="color: #66cc66;">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; source <span style="color: #66cc66;">=</span> variant.<span style="color: #006600;">javaCompile</span>.<span style="color: #006600;">source</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; ext.<span style="color: #006600;">androidJar</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;${project.android.sdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; classpath <span style="color: #66cc66;">=</span> project.<span style="color: #006600;">files</span><span style="color: #66cc66;">&#40;</span>variant.<span style="color: #006600;">javaCompile</span>.<span style="color: #006600;">classpath</span>.<span style="color: #006600;">files</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> project.<span style="color: #006600;">files</span><span style="color: #66cc66;">&#40;</span>ext.<span style="color: #006600;">androidJar</span><span style="color: #66cc66;">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; options <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; linksOffline<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://d.android.com/reference&quot;</span>, <span style="color: #ff0000;">&quot;${project.android.sdkDirectory}/docs/reference&quot;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; links<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://docs.oracle.com/javase/7/docs/api/&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setMemberLevel<span style="color: #66cc66;">&#40;</span>JavadocMemberLevel.<a href="http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20package"><span style="color: #000000; font-weight: bold;">PACKAGE</span></a><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; docEncoding <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UTF-8'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; encoding <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UTF-8'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; charSet <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'UTF-8'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/BuildConfig.java'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/R.java'</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<br />
&nbsp; &nbsp; project.<span style="color: #006600;">task</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;generate${variant.name.capitalize()}JavadocJar&quot;</span>, type: Jar, dependsOn: <span style="color: #ff0000;">&quot;${variant.name.capitalize()}Javadoc&quot;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; classifier <span style="color: #ff0000;">'javadoc'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; description <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'Assembles a jar archive containing the generated Javadoc API documentation of $variant.name.'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; destinationDir <span style="color: #66cc66;">=</span> <a href="http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20new"><span style="color: #000000; font-weight: bold;">new</span></a> <a href="http://www.google.de/search?as_q=File&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1%2E5%2E0%2Fdocs%2Fapi%2F"><span style="color: #aaaadd; font-weight: bold;">File</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;$project.buildDir/libs/&quot;</span><span style="color: #66cc66;">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/BuildConfig.class'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/R.class'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; from <span style="color: #ff0000;">&quot;$project.buildDir/javadoc/$variant.name&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div></td></tr></tbody></table></div>
<p>When added to your <code class="codecolorer bash blackboard"><span class="bash">build.gradle</span></code> file, generate your Javadoc jar archive from the command line with <code class="codecolorer bash blackboard"><span class="bash">gradle generateReleaseJavadocJar</span></code>.<br />
</p>
<h3>Adding Source archive tasks</h3>
<p>The following will add tasks to assemble a jar archive containing the Java sources.</p>
<div class="codecolorer-container groovy blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">android.<span style="color: #006600;">applicationVariants</span>.<span style="color: #006600;">all</span> <span style="color: #66cc66;">&#123;</span> variant <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; project.<span style="color: #006600;">task</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;generate${variant.name.capitalize()}SourcesJar&quot;</span>, type: Jar<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; classifier <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'sources'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; description <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'Assembles a jar archive containing the main sources of $variant.name..'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; destinationDir <span style="color: #66cc66;">=</span> <a href="http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20new"><span style="color: #000000; font-weight: bold;">new</span></a> <a href="http://www.google.de/search?as_q=File&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1%2E5%2E0%2Fdocs%2Fapi%2F"><span style="color: #aaaadd; font-weight: bold;">File</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;$project.buildDir/libs/&quot;</span><span style="color: #66cc66;">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #808080; font-style: italic;">// exclude generated files</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/BuildConfig.java'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; exclude <span style="color: #ff0000;">'**/R.java'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; from variant.<span style="color: #006600;">javaCompile</span>.<span style="color: #006600;">source</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div></td></tr></tbody></table></div>
<p>When added to your <code class="codecolorer bash blackboard"><span class="bash">build.gradle</span></code> file, generate your Sources jar archive from the command line with <code class="codecolorer bash blackboard"><span class="bash">gradle generateReleaseSourcesJar</span></code>.<br />
</p>
<h3>Adding Proguard archive tasks</h3>
<p>The following will add tasks to assemble a zip archive containing the generated proguard files.</p>
<div class="codecolorer-container groovy blackboard" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">android.<span style="color: #006600;">applicationVariants</span>.<span style="color: #006600;">all</span> <span style="color: #66cc66;">&#123;</span> variant <span style="color: #66cc66;">-&gt;</span><br />
&nbsp; &nbsp; project.<span style="color: #006600;">task</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;generate${variant.name.capitalize()}ProguardFilesJar&quot;</span>, type: Zip<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; classifier <span style="color: #ff0000;">'proguard'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; description <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'Assembles a jar archive containing the Proguard files of $variant.name..'</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; destinationDir <span style="color: #66cc66;">=</span> <a href="http://www.google.de/search?q=site%3Agroovy.codehaus.org/%20new"><span style="color: #000000; font-weight: bold;">new</span></a> <a href="http://www.google.de/search?as_q=File&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1%2E5%2E0%2Fdocs%2Fapi%2F"><span style="color: #aaaadd; font-weight: bold;">File</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;$project.buildDir/libs/&quot;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; from <span style="color: #ff0000;">&quot;$project.buildDir/outputs/mapping&quot;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> &nbsp; &nbsp;<br />
<span style="color: #66cc66;">&#125;</span></div></td></tr></tbody></table></div>
<p>When added to your <code class="codecolorer bash blackboard"><span class="bash">build.gradle</span></code> file, generate your Proguard zip archive from the command line with <code class="codecolorer bash blackboard"><span class="bash">gradle generateReleaseProguardFilesJar</span></code>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Android Testing Support Library announced</title>
		<link>http://wiebe-elsinga.com/blog/android-testing-support-library-announced/</link>
					<comments>http://wiebe-elsinga.com/blog/android-testing-support-library-announced/#comments</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Mon, 03 Nov 2014 03:39:42 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Functional testing]]></category>
		<category><![CDATA[Support library]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1608</guid>

					<description><![CDATA[During the Droidcon UK 2014, Stephan Linzner of Google announced the upcoming Android Testing Support Library. This means Google is (finally) taking testing Android apps seriously. The library is a unbundled static testing library for Android that containers all Android testing frameworks by Google. It will become a available through the Android Support repository and as open source in AOSP. So what does it contain? AndroidJUnitRunner This Runner, based on android.test.InstrumentationTestRunner, runs JUnit3 and JUnit4 tests against an Android package (application). Let me give an example: @RunWith &#40;JUnit4.class&#41; public class MyJUnit4Test &#123; &#123; &#160; Droidcon mDroidconUK; &#160; &#160; @Before &#160; public void setUp&#40;&#41; &#123; &#160; &#160; mDroidconUK = new Droidcons.get&#40;Droidcon.UK&#41;; &#160; &#160; mDroidconUK.open&#40;&#41;; &#160; &#125; &#160; @Test &#160; public void checkPreconditions&#40;&#41; &#123; &#160; &#160; assertNotNull&#40;&#34;mDroidconUK cannot be null&#34;, mDroidconUK&#41;; &#160; &#125; &#160; @After &#160; public void tearDown&#40;&#41; &#123; &#160; &#160; mDroidconUK.close&#40;&#41;; &#160; &#125; &#125; Espresso Introduced at the GTAC in 2013, Espresso makes it possible to write concise, beautiful, and reliable Android UI tests quickly. Lets look at some examples: // Find view using a Matcher and type text using a ViewAction onView&#40;withId&#40;R.id.message_edit_text&#41;&#41;.perform&#40;typeText&#40;TEXT_MESSAGE&#41;, closeSoftKeyboard&#40;&#41;&#41;; // Perform a click ViewAction onView&#40;withId&#40;R.id.send_button&#41;&#41;.perform&#40;click&#40;&#41;&#41;; // Verify using a ViewAssertion onView&#40;withId&#40;R.id.received_message_text_view&#41;&#41;.check&#40;matches&#40;withText&#40;&#40;TEXT_MESSAGE&#41;&#41;&#41;&#41;; Intento Intento is like Mockito but for Intents. Basically a mock framework that allows you to create and configure mock objects. Let me give you an example: public void testDailerInput_typeNumberAndCall&#40;&#41; &#123; &#160; &#160; //Type phonenumber in dialer &#160; onView&#40;withId&#40;R.id.send_data_to_call_edit_text&#41;&#41;.perform&#40;scrollTo&#40;&#41;, typeText&#40;&#34;123-345-6789&#34;&#41;, closeSoftKeyboard&#40;&#41;&#41;; &#160; &#160; // Click the call button &#160; onView&#40;withId&#40;R.id.send_to_call_button&#41;&#41;.perform&#40;scrollTo&#40;&#41;, click&#40;&#41;&#41;; &#160; &#160; //Validate Intent has been send &#160; intended&#40;allOf&#40; &#160; &#160; &#160; hasAction&#40;Intent.ACTION_CALL&#41;, &#160; &#160; &#160; toPackage&#40;&#34;com.android.phone&#34;&#41;, &#160; &#160; &#160; hasData&#40;allOf&#40;hasSchemaSpecificPart&#40;&#34;tel&#34;, &#34;123-345-6789&#34;&#41;&#41;&#41;&#41;, &#160; &#160; &#160; times&#40;1&#41;&#41;; &#125; In conclusion: Testing with Android is finally becoming a more prominent part of Android Development cycle with the introduction of the Android Testing Support Library]]></description>
										<content:encoded><![CDATA[<p>During the <a href="http://uk.droidcon.com/2014/" title="Droidcon UK 2014" target="_blank">Droidcon UK 2014</a>, <a href="https://plus.google.com/+StephanLinzner" title="StephanLinzner G+ Profile" target="_blank">Stephan Linzner</a> of Google announced the upcoming Android Testing Support Library. This means Google is (finally) taking testing Android apps seriously. </p>
<p>The library is a unbundled static testing library for Android that containers all Android testing frameworks by Google. It will become a available through the Android Support repository and as open source in AOSP.</p>
<p>So what does it contain?</p>
<ul>
<li><em><strong>AndroidJUnitRunner</strong></em><br />
This Runner, based on <em>android.test.InstrumentationTestRunner</em>, runs <em>JUnit3</em> and <em>JUnit4</em> tests against an Android package (application). Let me give an example:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:100%;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">@RunWith <span style="color: #009900;">&#40;</span>JUnit4.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyJUnit4Test <span style="color: #009900;">&#123;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; Droidcon mDroidconUK<span style="color: #339933;">;</span><br />
&nbsp;<br />
&nbsp; @Before <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; mDroidconUK <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Droidcons.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>Droidcon.<span style="color: #006633;">UK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; mDroidconUK.<span style="color: #006633;">open</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; @Test <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> checkPreconditions<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; assertNotNull<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;mDroidconUK cannot be null&quot;</span>, mDroidconUK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; @After <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> tearDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; mDroidconUK.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>
</li>
<li><em><strong>Espresso</strong></em><br />
Introduced at the GTAC in 2013, Espresso makes it possible to write concise, beautiful, and reliable Android UI tests quickly. Lets look at some examples:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #666666; font-style: italic;">// Find view using a Matcher and type text using a ViewAction</span><br />
onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">message_edit_text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>typeText<span style="color: #009900;">&#40;</span>TEXT_MESSAGE<span style="color: #009900;">&#41;</span>, closeSoftKeyboard<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Perform a click ViewAction</span><br />
onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">send_button</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Verify using a ViewAssertion</span><br />
onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">received_message_text_view</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">check</span><span style="color: #009900;">&#40;</span>matches<span style="color: #009900;">&#40;</span>withText<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>TEXT_MESSAGE<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>
</li>
<li><em><strong>Intento</strong></em><br />
Intento is like Mockito but for Intents. Basically a mock framework that allows you to create and configure mock objects. Let me give you an example:</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> testDailerInput_typeNumberAndCall<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">//Type phonenumber in dialer</span><br />
&nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">send_data_to_call_edit_text</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>scrollTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, typeText<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;123-345-6789&quot;</span><span style="color: #009900;">&#41;</span>, closeSoftKeyboard<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">// Click the call button</span><br />
&nbsp; onView<span style="color: #009900;">&#40;</span>withId<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">send_to_call_button</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">perform</span><span style="color: #009900;">&#40;</span>scrollTo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, click<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">//Validate Intent has been send</span><br />
&nbsp; intended<span style="color: #009900;">&#40;</span>allOf<span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; hasAction<span style="color: #009900;">&#40;</span>Intent.<span style="color: #006633;">ACTION_CALL</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; toPackage<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.android.phone&quot;</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; hasData<span style="color: #009900;">&#40;</span>allOf<span style="color: #009900;">&#40;</span>hasSchemaSpecificPart<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;tel&quot;</span>, <span style="color: #0000ff;">&quot;123-345-6789&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; times<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
</li>
</ul>
<p>
<strong>In conclusion</strong>: Testing with Android is finally becoming a more prominent part of Android Development cycle with the introduction of the Android Testing Support Library</p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/android-testing-support-library-announced/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Has Google Glass™ got potential</title>
		<link>http://wiebe-elsinga.com/blog/has-google-glass-got-potential/</link>
					<comments>http://wiebe-elsinga.com/blog/has-google-glass-got-potential/#comments</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Thu, 27 Mar 2014 00:37:30 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Glass]]></category>
		<category><![CDATA[Business cases]]></category>
		<category><![CDATA[GoogleGlass]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1518</guid>

					<description><![CDATA[As Glass explorers we get asked what the (business) potential is, and what it can mean for developers. Taking pictures and video or getting information from the internet seems to be the biggest need for the first time Google Glass™ users. But the technology that Google Glass™ provides is much bigger, and it is already being trailed in different industries. So what are some real-world applications that are already being developed 1. Healthcare Using Google Glass™ in healthcare has a big potential. Not only for the specialist, but also for patients and students. Google Glass™ can be applied in different settings. During operative procedures, outside the hospital like trauma-helicopter and during house calls. Radboud UMC (The Netherlands) are doing research on the use of Google Glass™ in the operating room. Using the video footage that is being live streamed shows the surgeons perspective and is useful for medical students and colleagues. And asking a colleague in another location (or country perhaps) to have a look while operating is made possible. Helping nurses or doctors to identify patients so up-to-date information is always at hand (or eye) which increases the efficiency of staff and accuracy of treatment given to patients. We are currently testing a Glass application called MedicAR which combines augmented reality and Google Glass™ to improve the simulation and teaching of certain procedures in surgery and patient care. Talking about augmented reality 2. Augmented Reality Google Glass™ and the use of AR (augmented reality) allows you to enhance the user experience and support the customer with additional information to better serve their needs. Maybe a few years from now we will be living in an AR world. Google Glass™ applications will be available to highlight the health benefits of foods and any promotions while shopping. Google Glass™ retail assistants will be able to help customers by providing information on products and check stock levels. Layar has created a Google Glass™ application to view their AR content. It allows the consumer to look at geo location information, view movie trailers right from the poster and accessing extra content hidden away in magazines. 3. Assistance for the disabled Google Glass™ has the potential to make life-changing differences for those with disabilities. Because Google Glass™ is voice activated, it can be incredibly beneficial. The hands-free form factor allows paraplegics to easily stay connected without using their hands. With facial analytics, it&#8217;s possible to, with the subject&#8217;s approval, have Google Glass™ scan a face and put up a green light if the person is intrigued, yellow if they&#8217;re confused or red if they&#8217;re bored. This helps those with conditions such as Agnosia to make sense of facial expressions. Google Glass™ is also being used to help those who, or know people that are blind or deaf. The Smartsign app is designed to enhance communication between parents and their deaf children. It can be difficult for parents to keep up with children who may be learning sign language at a rapid pace and this can disrupt communication. The application allows parents to look up words so they can communicate effectively, instead of having to consult a nearby book or computer. 4. Logistics Already warehouse managers and trucking companies have tools to monitor stock levels and positioning, but Google Glass™ can offer more effective, compact and less obtrusive ways to collect the (real time) data. The camera will play a pivotal role &#8211; allowing to scan barcodes and NFC tags to identify packages, bring up order records and verify the location. The benefits are that operations can move faster and safer as handlers have both hands available. 5. Public service Imagine the police wearing Google Glass™, supplying them with critical information at the right moment. Scanning a numberplate to know if the driver has a firearm is useful information to protect the user, or prevent bad situations. Firefighter Patrick Jackson created a Google Glass™ that can show nearby hydrants at the location of the incident. In the near future his application can provide him with vital information, like building blueprints, floor plans and emergency exits, before he even enters the building. In conclusion In my opinion probably every industry would have some use for Google Glass™. New (business) cases will emerge from trial and error as early adopters discover what works and what doesn’t. And with any new technology, it’s important to carefully evaluate whether or not the potential benefits make sense to you and/or your organization. In essence, the technology that Google Glass™ provides is easily learned by Android developers but like most revolutionary technologies the main challenge is finding useful applications.]]></description>
										<content:encoded><![CDATA[<p><span style="line-height: 1.5em;">As Glass explorers we get asked what the (business) potential is, and what it can mean for developers.</span></p>
<p>Taking pictures and video or getting information from the internet seems to be the biggest need for the first time Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> users.<br />
But the technology that Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> provides is much bigger, and it is already being trailed in different industries. So what are some real-world applications that are already being developed</p>
<p><span id="more-1518"></span></p>
<h2>1. Healthcare</h2>
<p>Using Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> in healthcare has a big potential. Not only for the specialist, but also for patients and students. Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> can be applied in different settings. During operative <a href="http://youtu.be/YZtNO2OnSqY" target="_blank">procedures</a>, outside the hospital like <a href="http://youtu.be/WKMTdk3ZtaE" target="_blank">trauma-helicopter</a> and during house calls. <a href="http://www.umcn.nl/" target="_blank">Radboud UMC</a> (The Netherlands) are doing research on the use of Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> in the operating room. Using the video footage that is being live streamed shows the surgeons perspective and is useful for medical students and colleagues. And asking a colleague in another location (or country perhaps) to have a look while operating is made possible.</p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/YZtNO2OnSqY?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center></p>
<p><span style="line-height: 1.5em;">Helping nurses or doctors to identify patients so up-to-date information is always at hand (or eye) which increases the efficiency of staff and accuracy of treatment given to patients.</span></p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/8uoBahl4zQ8?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center></p>
<p><a href="http://www.itude.com" target="_blank">We</a> are currently testing a Glass application called MedicAR which combines augmented reality and Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> to improve the simulation and teaching of certain procedures in surgery and patient care.</p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/B9cjwZb9zf8?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center></p>
<p>Talking about augmented reality<br />
</p>
<h2>2. Augmented Reality</h2>
<p>Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> and the use of AR (augmented reality) allows you to enhance the user experience and support the customer with additional information to better serve their needs. Maybe a few years from now we will be living in an AR world. Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> applications will be available to highlight the health benefits of foods and any promotions while shopping. Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> retail assistants will be able to help customers by providing information on products and check stock levels.</p>
<p><a href="https://www.layar.com/" target="_blank">Layar</a> has created a Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> application to view their AR content. It allows the consumer to look at geo location information, view movie trailers right from the poster and accessing extra content hidden away in magazines.</p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/rBPmG5mqWfI?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center><br />
</p>
<h2>3. Assistance for the disabled</h2>
<p>Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> has the potential to make life-changing differences for those with disabilities. Because Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> is voice activated, it can be incredibly beneficial. The hands-free form factor allows paraplegics to easily stay connected without using their hands.</p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/P8GVKqGruOQ?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center></p>
<p>With facial analytics, it&#8217;s possible to, with the subject&#8217;s approval, have Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> scan a face and put up a green light if the person is intrigued, yellow if they&#8217;re confused or red if they&#8217;re bored.<br />
This helps those with conditions such as Agnosia to make sense of facial expressions.</p>
<p>Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> is also being used to help those who, or know people that are blind or deaf. The Smartsign app is designed to enhance communication between parents and their deaf children. It can be difficult for parents to keep up with children who may be learning sign language at a rapid pace and this can disrupt communication. The application allows parents to look up words so they can communicate effectively, instead of having to consult a nearby book or computer.</p>
<p><center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/R6RgmIKUJ3E?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center><br />
</p>
<h2>4. Logistics</h2>
<p>Already warehouse managers and trucking companies have tools to monitor stock levels and positioning, but Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> can offer more effective, compact and less obtrusive ways to collect the (real time) data. The camera will play a pivotal role &#8211; allowing to scan barcodes and NFC tags to identify packages, bring up order records and verify the location. The benefits are that operations can move faster and safer as handlers have both hands available.<br />
</p>
<h2>5. Public service</h2>
<p>Imagine the police wearing Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />, supplying them with critical information at the right moment. Scanning a numberplate to know if the driver has a firearm is useful information to protect the user, or prevent bad situations. Firefighter Patrick Jackson created a Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> that can show nearby hydrants at the location of the incident. In the near future his application can provide him with vital information, like building blueprints, floor plans and emergency exits, before he even enters the building.<br />
<center></p>
<div style="max-width:560px;" ><iframe src="http://www.youtube.com/embed/QPbZy2wrTGk?wmode=transparent" width="560" height="315" ></iframe></div>
<p></center><br />
</p>
<h2>In conclusion</h2>
<p>In my opinion probably every industry would have some use for Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />. New (business) cases will emerge from trial and error as early adopters discover what works and what doesn’t. And with any new technology, it’s important to carefully evaluate whether or not the potential benefits make sense to you and/or your organization.<br />
In essence, the technology that Google Glass<img src="https://s.w.org/images/core/emoji/13.1.0/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> provides is easily learned by Android developers but like most revolutionary technologies the main challenge is finding useful applications.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/has-google-glass-got-potential/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Glass, a UX point of view</title>
		<link>http://wiebe-elsinga.com/blog/glass-a-ux-point-of-view/</link>
					<comments>http://wiebe-elsinga.com/blog/glass-a-ux-point-of-view/#respond</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Mon, 20 Jan 2014 04:02:05 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Glass]]></category>
		<category><![CDATA[GoogleGlass]]></category>
		<category><![CDATA[UX]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1506</guid>

					<description><![CDATA[You probably already know Google Glass, and maybe even read on how to create Glasswear, but what about a UX point of view. In this article we will be discussing the UX of Glass. Introduction Glass was designed to be used everyday and everywhere as content provider, so having a easy and clear UX is essential. Its UX is remarkably consistent with the UX of other Google products: crisp and flat. Controlling Glass through voice commands, navigating from the touch-sensitive side or using the camera button on top, are all done with ease. Lets have a closer look at some of these UX features. Home The home card is the starting point for all things Glass, and from this screen, you can invoke Glass through voice activation. A user can activate the home card, and basically use Glass by either tapping the touchpad or tilting ones head (up). Why they chose to add this feature, I still don&#8217;t know, but using this &#8220;head wake up&#8221; only enhances the weirdness of wearing Glass. Lists Talking about voice activation, when you actually want to have a look at some of the voice triggered actions, you first have to say the magic phrase “ok Glass”. Doing so will show you a list of voice commands that are available by default. As supposed to the &#8220;normal&#8221; way of navigating (swipe forward, backwards or down), you view the list by looking down. This isn&#8217;t a smooth experience and leaves a lot to be desired. Timeline The UI is driven by the timeline, a series of information cards displayed depending on what you’re doing and where you are in the timeline. For example, to go to the previous cards (photos, messages, emails, etc.), you swipe from back to front, pulling up the past from behind you. Cards associated with upcoming events, like Google Now cards for traffic, flights, restaurant recommendations, etc. are all ahead of you. So you swipe backward to pull those things into your view. It will take you a bit of time to get the hang of it, but eventually you will master it. Conclusion In conclusion, Google has managed to simplify the UX. The technology is there when they want it but out of the way when they don’t. From an UX point of view it&#8217;s not really as consistent, and there is definitely a learning curve. So Glass has still a long way to go, but is paving the way to new possibilities. Up next: Glass, a Developers point of view.]]></description>
										<content:encoded><![CDATA[<p>You probably already know Google Glass, and maybe even read on how to create Glasswear, but what about a UX point of view.<br />
In this article we will be discussing the UX of Glass.</p>
<h2>Introduction</h2>
<p>Glass was designed to be used everyday and everywhere as content provider, so having a easy and clear UX is essential.<br />
Its UX is remarkably consistent with the UX of other Google products: crisp and flat.<br />
Controlling Glass through voice commands, navigating from the touch-sensitive side or using the camera button on top, are all done with ease.<br />
Lets have a closer look at some of these UX features.</p>
<h2>Home</h2>
<p>The home card is the starting point for all things Glass, and from this screen, you can invoke Glass through voice activation.<br />
A user can activate the home card, and basically use Glass by either tapping the touchpad or tilting ones head (up).<br />
Why they chose to add this feature, I still don&#8217;t know, but using this &#8220;head wake up&#8221; only enhances the weirdness of wearing Glass.</p>
<h2>Lists</h2>
<p>Talking about voice activation, when you actually want to have a look at some of the voice triggered actions, you first have to say the magic phrase “ok Glass”. Doing so will show you a list of voice commands that are available by default.<br />
<center><img  src="https://storage.googleapis.com/support-kms-prod/SNP_3082137_en_v2"/></center><br />
As supposed to the &#8220;normal&#8221; way of navigating (swipe forward, backwards or down), you view the list by looking down. This isn&#8217;t a smooth experience and leaves a lot to be desired.</p>
<h2>Timeline</h2>
<p>The UI is driven by the timeline, a series of information cards displayed depending on what you’re doing and where you are in the timeline.<br />
For example, to go to the previous cards (photos, messages, emails, etc.), you swipe from back to front, pulling up the past from behind you.<br />
Cards associated with upcoming events, like Google Now cards for traffic, flights, restaurant recommendations, etc. are all ahead of you. So you swipe backward to pull those things into your view.<br />
<center><img  src="https://storage.googleapis.com/support-kms-prod/SNP_3083411_en_v2"/></center><br />
It will take you a bit of time to get the hang of it, but eventually you will master it.</p>
<h2>Conclusion</h2>
<p>In conclusion, Google has managed to simplify the UX. The technology is there when they want it but out of the way when they don’t.<br />
From an UX point of view it&#8217;s not really as consistent, and there is definitely a learning curve.<br />
So Glass has still a long way to go, but is paving the way to new possibilities.</p>
<p>Up next: Glass, a Developers point of view.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/glass-a-ux-point-of-view/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Google TV emulator device definition</title>
		<link>http://wiebe-elsinga.com/blog/google-tv-emulator-device-definition/</link>
					<comments>http://wiebe-elsinga.com/blog/google-tv-emulator-device-definition/#respond</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Thu, 17 Jan 2013 09:29:49 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Emulator]]></category>
		<category><![CDATA[Google TV]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1405</guid>

					<description><![CDATA[So you want to use a Google TV emulator to develop Android applications. Many people having problems using the Google TV emulator because it hangs during booting (only showing the Google TV logo). The problem is that it only works with specific device configurations and resolutions. So lets have a look at the device definition: This setup is for a 720p resolution, for a 1080p you must change the resolution to 1920×1080 and the density from tvdpito xhdpi. Once the device definition is created, the next step is to create a new Android Virtual Device using it:]]></description>
										<content:encoded><![CDATA[<p>So you want to use a Google TV emulator to develop Android applications. Many people having problems using the Google TV emulator because it hangs during booting (only showing the Google TV logo).<br />
The problem is that it only works with specific device configurations and resolutions.</p>
<p>So lets have a look at the device definition:<br />
<a href="http://wiebe-elsinga.com/blog/?attachment_id=1407" rel="attachment wp-att-1407"><img loading="lazy" class="size-full wp-image-1407 aligncenter" alt="Device definition" src="http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.21.58.png" width="667" height="389" srcset="http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.21.58.png 667w, http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.21.58-300x175.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></a></p>
<p>This setup is for a <strong>720p</strong> resolution, for a <strong>1080p</strong> you must change the resolution to <strong>1920×1080</strong> and the density from <strong>tvdpi</strong>to <strong>xhdpi</strong>. Once the device definition is created, the next step is to create a new <strong>Android Virtual Device</strong> using it:</p>
<p><a href="http://wiebe-elsinga.com/blog/?attachment_id=1408" rel="attachment wp-att-1408"><img loading="lazy" class="aligncenter size-full wp-image-1408" alt="Avd" src="http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.25.27.png" width="529" height="525" srcset="http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.25.27.png 529w, http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.25.27-150x150.png 150w, http://wiebe-elsinga.com/blog/wp-content/uploads/2013/01/Screen-Shot-2013-01-17-at-17.25.27-300x298.png 300w" sizes="(max-width: 529px) 100vw, 529px" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/google-tv-emulator-device-definition/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Prototype your Mobile Application</title>
		<link>http://wiebe-elsinga.com/blog/prototype-your-mobile-application/</link>
					<comments>http://wiebe-elsinga.com/blog/prototype-your-mobile-application/#respond</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Fri, 21 Dec 2012 09:43:40 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Prototype]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1382</guid>

					<description><![CDATA[As some of you may know I gave a presentation about why, and how to prototype your mobile application at the Droidcon Spain. If you want to see this presentation have a look at]]></description>
										<content:encoded><![CDATA[<p>As some of you may know I gave a presentation about why, and how to prototype your mobile application at the Droidcon Spain. If you want to see this presentation have a look at<br />
<a href="http://tv.um.es/video?id=44121"><br />
<center><img style="display: block;" alt="" src="http://tv.um.es/data/cache/om/capture/44771/720x405/capture.jpg" /></center><br />
</a></p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/prototype-your-mobile-application/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How was 2012 for the Mobile industry?</title>
		<link>http://wiebe-elsinga.com/blog/how-was-2012-for-the-mobile-industry/</link>
					<comments>http://wiebe-elsinga.com/blog/how-was-2012-for-the-mobile-industry/#respond</comments>
		
		<dc:creator><![CDATA[W.Elsinga]]></dc:creator>
		<pubDate>Wed, 19 Dec 2012 13:02:59 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[recap]]></category>
		<guid isPermaLink="false">http://wiebe-elsinga.com/blog/?p=1366</guid>

					<description><![CDATA[2012 is closing to an end. Normally this means time to look back on the things that happen during this year. A lot has happen within the Mobile industry, Facebook went public, Apple is suing Samsung (again), and a lot of new product saw daylight. Here are some of the most dramatic mobile moments of 2012. Updated (20-12) Another great Mobile year in review video.]]></description>
										<content:encoded><![CDATA[<p>2012 is closing to an end. Normally this means time to look back on the things that happen during this year.<br />
A lot has happen within the Mobile industry, Facebook went public, Apple is suing Samsung (again), and a lot of new product saw daylight.<br />
<a href="http://www.mobileworldlive.com/feature-video-the-most-dramatic-mobile-moments-of-2012" title="Movie time" target="_blank">Here</a> are some of the most dramatic mobile moments of 2012.</p>
<p><strong>Updated</strong> (20-12) Another great Mobile year in review <a href="http://youtu.be/cdWmIoeLyfc" title="Movie time" target="_blank">video</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://wiebe-elsinga.com/blog/how-was-2012-for-the-mobile-industry/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
