LightBlog

mercredi 14 septembre 2016

OUYA is publishing games now: here’s what’s out there so far

Mercenary KingsYouTube

OUYA unfortunately couldn't translate its early hype into hardware sales of its Android-based console, but the game maker is now using its second lease on life, courtesy of Razer, to publish games for Android TV.

The latest game pushed out by publisher OUYA Global is Mercenary Kings, a 2D action game that might remind you a bit of BroForce or a Contra game. Originally release on Steam, and eventually on PlayStation 4 and PS Vita, Mercenary Kings brought it's over-the-top tale of an island assault and playful take on action movie tropes to Android TV last week.

Beyond its run and gun core, Mercenary Kings stuffs looting and crafting elements inside and in between its more than 100 missions. There's a progression system in place and support for up to four players in co-op — of course, you can lone wolf it if you want.

OUYA Global has published three games to the Play Store so far

Back in July, OUYA Global released a moody 2D take on the battle arena genre. Originally released on Steam, ChargeShot pits up to four players against one another in galactic areas the quake with each blast and blow delivered inside of it. ChargeShot combatants are armed with deadly pulse cannon, shields for deflecting shots and jetpacks for rapid traversal of the grim arenas in which they fight to the death for a prize purse filled with credits. Because the battles are televised over galactic networks, there's an announcer calling the play-by-plays as players blast each other's blood and brains across the arena. best android tv gamesSee also: The best Android TV games8

And the first title OUYA Global published to Google Play arrive back in June, bringing its retro-style ghosting and arcade gameplay to Android TV. Like its stablemates, Mimic Arena is meant for local multiplayer play and pits couch-side combatants against one another. Mimic Arena players are armed with a vast arsenal of weapons, but it's the game's mimic mechanic that makes it unique. Each action a player makes will be mimicked by a clone, which can make for some interesting strategies.

We're sure OUYA isn't done publishing new titles to the Play Store anytime soon, so head to the link attached below to access the OUYA Global developer page.

Check out OUYA Global on Google Play


from Android Authority http://ift.tt/2d04PbI
via IFTTT

Android 7.0 Nougat coming to Nexus 6 and Nexus 9 LTE ‘in the coming weeks’

nexus 6 first impressions (17 of 21)

Google released the consumer-ready version of Android 7.0 Nougat a few weeks ago, but it's taken the company a little longer than usual to push it out to current Nexus devices. More than three weeks went by before Nexus 6P factory images showed up on Google's website, and we're still waiting for updates to arrive for the Nexus 6 and Nexus 9 LTE.

Unfortunately, Nexus 6 and Nexus 9 LTE owners will have to wait a bit longer.

Nougat will begin rolling out to the Nexus 6 and Nexus 9 LTE 'in the coming weeks'

According to a statement given to Android Police, Google says the Android 7.0 Nougat rollout for the Nexus 6 and Nexus 9 LTE will begin in a few weeks, though at this time there isn't an exact timetable as to when it will begin. We're not sure why these two updates are being delayed for so long, but we're assuming it has something to do with some bugs that need squashing before an official release rolls out. Nougat is here, though getting it to all devices is a whole other story.Don't miss: Android 7.0 Nougat review340

If you just can't wait anymore and are getting sick of boring old Android 6.0 Marshmallow, you might want to try enrolling in the Android Beta Program. You'll receive an OTA update to the most recent Developer Preview, which I can say from experience isn't too much different from the official version of Android 7.



from Android Authority http://ift.tt/2cwOmum
via IFTTT

Amazon Echo arrives in the UK with new white model

Amazon Echo Dot white

More than two years after launching the Amazon Echo in the US, the little smart speaker has finally made its way to the UK. Speaking at a launch event in London, Amazon not only announced that the Echo and Echo Dot would soon go on sale in the UK, but also that they will also be available in a new white color option as well.

If you've missed some of our feature coverage, Echo connects up to your music streaming account over WiFi, can read back audio-books, and offer up weather, news, and time updates via the company's Alexa virtual assistant. Amazon has also partnered up with Sky Sports, TuneIn, Just Eat, Skyscanner and Uber in the UK for additional app support. Alexa has received a small upgrade of sorts too, she can now chat away in a charming English accent.

Pre-orders are now live over at Amazon UK. The regular Echo is priced at £150 and will begin shipping out to consumers on September 28th. If you're a Prime customer, you can save £50 off the Echo if you order within the next two days. There's a bit more of a wait for the £50 Echo Dot, which won't begin shipping until October 20th.

Amazon Echo pictured above.See also: Rumor: Amazon to launch a cheap Echo-exclusive music service4

Amazon has been making a big push to get its Echo devices into consumer's homes in order to increase the user base of its media streaming services. The company hopes to sell 3 million Echo devices this year and 10 million in 2017. Amazon has apparently been struggling to keep up with demand in the US, so it might be wise to get your pre-order in early, if you're interested.



from Android Authority http://ift.tt/2cNvk0A
via IFTTT

Samsung has a perception problem, and it’s bigger than the Note 7

Samsung Galaxy Note 7 vs Samsung Galaxy S7 Edge-4

Samsung's Note 7 recall is a giant, expensive mess. The cost of the recall will reach over $1 billion, and a further $5 billion in revenue could be lost. But Samsung has $23 billion in cash reserves. It can deal with any losses generated by the Note 7 fiasco. The situation is bad, but Samsung can fix it.

What Samsung cannot easily fix is the recall's effect on how the public see its smartphones, and that is arguably the biggest challenge that the company is facing right now.

A concerning Note

Take the case of the 6-year boy from New York who suffered injuries when a Samsung phone "exploded" in his hands. In the rush to put the news out, media assumed that the phone must be a Note 7, because that's the phone that Samsung is recalling and that's what everyone's talking about. The phone was actually a Galaxy Core, it was revealed a couple of days later, when NBC actually took time to discuss with the boy's family.

Of course, Samsung is still liable for this unfortunate incident, and it should be held accountable every time one of its products causes harm or damage.

But looking at the big picture, confusions like this illustrate Samsung's massive public perception problem, which is that all Galaxies are pretty much the same.

They are all Galaxies

For the average consumer there's no big difference between a Galaxy Note and a Galaxy Core, or between a Galaxy S7 and a Galaxy A7. They are all just Galaxies. Some of them are more expensive, some fancier, but they are all, at the end of the day, "Galaxies."

Samsung benefited from this line-blurring when it used the prestige of its flagships to sell cheaper devices. That's why Samsung has dozens of devices in every screen size imaginable that all look similar. It's a strategy that helped Samsung become the biggest smartphone maker in the world.

Now, in an ironic twist, the line-blurring is coming back to haunt Samsung. Case in point, on some American Airlines and Delta flights, attendants are asking passengers to power down all Samsung smartphones. "It's hard to tell at a glance if a phone is a Note 7 or not. But we can tell if something's a Samsung from the aisle," a flight attendant explained.

note 7 trends (2)

Google searches for "Samsung explosion" have spiked, although the recall only concerns the Note 7

Guilty by association

Samsung phones are now the subject of a media frenzy that must delight its competitors. And it's not just the technology sites that cover it.

Tens of thousands of newspaper articles, posts, videos, tweets, Facebook updates, morning shows, and primetime news programs mention the Galaxy Note 7 fires, the damage they generate, and the injuries they can cause. Even worse (for Samsung), media is latching on every report of a Samsung phone catching fire, be it a Note, a Galaxy Core, a Galaxy S7 Edge, or another device. A few examples from the last days:

All eyes are on Samsung, despite the fact that devices from all manufacturers can catch fire or overheat. As IDC research Ramon Llamas put it,

"The impact to its brand is spreading where other Samsung phones – regardless if they are Note 7's or not – are now becoming guilty by association. I won't be surprised if more consumers are questioning whether their Samsung phones are safe."

This storm of bad publicity already has tangible effects. Look at any post or news article mentioning any Samsung product, and you'll probably see a comment about it blowing up.

note 7 burn explodeSee also: Why phones "explode" sometimes, and what you can do to protect yourself54

For Samsung, the real danger is not that the Note 7 will become known as the phone that explodes. It's that Samsung phones in general will become known as unsafe or poorly manufactured. And the effect could last for years: Apple's comparatively minor "Antennagate" and "Bendgate" still come up regularly in conversations.

samsung galaxy note 7 recall fire explosion (3)

This image could haunt Samsung for years

Action is needed

The good news is Samsung has already acted to fight this perception. It began the Note 7 recall before the public at large became aware of any incidents and it left no room for confusion, by opting for a full recall rather than a limited one.

But more is needed. That OTA update that should prevent more fire incidents has only been announced for South Korea. Samsung said it's in "talks" with carriers from the other nine countries where the Note 7 is available, but it should move faster. If carriers – like carriers do – resist, Samsung should beg, threaten, and bribe them into submission.

Samsung can afford to pay more, and frankly, it should pay more

Next, those replacement units can't come soon enough. Once Samsung announces that the first customers have got their new Note 7 units, media will finally have something positive to talk about.

That $25 gift card that Samsung is giving to Note 7 customers in the US is not enough. Samsung can afford to pay more, and frankly, it should pay more to compensate users for the hassle and confusion.

Samsung also needs to work with retailers of all sizes to ensure that all customers get proper loaner devices – and no, the Galaxy J1 Ace the company is giving to some people doesn't qualify. Even more importantly, Samsung has to educate its partners' customer service staff, so customers get clear answers to all of their questions.

To be fair, Samsung may be working on all of these measures, and more, right now. But if that's the case, it's not doing a great job explaining it to worried folks. Samsung has to open up to the public and talk about what happened and what it's doing to ensure that nobody gets hurt.

A lesson for all?

The bigger challenge comes after this Note 7 debacle is finally over. It's hard to say precisely how Samsung can clean up its image. Better customer service and higher manufacturing standards would definitely help, along with a communication campaign to publicize the changes. And price cuts will also go a long way to make people forget they ever worried about the Note 7.

Maybe there's also a lesson for us media and customers in this story. We're constantly pushing manufacturers to deliver more and deliver faster. We demand thinner phones, nicer materials, faster processors, and better screens, if possible at lower prices. And that's normal. But perhaps we shouldn't be surprised when phones, and the companies that make them, sometimes cave in under the pressure.

What do you think? Are you happy with the way Samsung is handling the recall? Do you think this situation will have lasting effects on Samsung?



from Android Authority http://ift.tt/2cJ7UdM
via IFTTT

Using RecyclerView to build lists in Android

recyclerview-featured

RecyclerView is a modern, properly planned and more efficient improvement on the ListView. The ListView (and RecyclerView) are android widgets that can hold (and display) a collection of items. Each item in the list is displayed in an identical manner, and this is achieved by defining a single layout file that is inflated for each list item. Since the total number of items in a list can be arbitrarily large, it would be impractical to inflate the layout for each list item immediately the ListView is created. The ListView was created in such a way that Views that are no longer needed (possibly when the user has scrolled away) can be reused to display other items in the list as necessary. Some of the issues experienced with ListView, which RecyclerView is designed to solve include:

  1. ListView handled layout management. This might seem intuitively correct, however it is more work for the ListView, compared to the RecyclerView, which requires a LayoutManager.
  2. Only vertical scrolling is allowed in ListView. Items in a ListView can be arranged, displayed and scrolled in a vertical list only, whereas RecyclerView's LayoutManager can create both vertical and horizontal lists (and diagonal lists if you care to implement that).
  3. The ViewHolder pattern is not enforced by ListView. The ViewHolder pattern holds Views in a cache, when created, and reuses Views from this cache as needed. While the ListView encourages the use of this pattern, it did not require it, and so, developers could ignore the ViewHolder pattern and create a new View every time. RecyclerView forces usage of this pattern.
  4. ListView has no animations. Animating removal and/or insertion of new items is not designed into ListView. However, with the increased maturity of the android platform and the material design obsession with aesthetics and animations, RecyclerView, by default, animates adding and removing list items. (Actually, RecyclerView.ItemAnimator handles these animations.)

To recap, the RecyclerView has an Adapter (to manage the items in the list), a ViewHolder (to hold a view representing a single list item), a LayoutManager (to handle the layout and scroll direction of the list) and an ItemAnimator (to handle animations). At this point, you might be thinking "This seems like a lot of work to display a list of items". It's actually really simple, but let's get coding and you draw your own conclusions.

Using RecyclerView

Before using RecyclerView in your android project, you have to import the RecyclerView library as a project dependency. You can do this by either adding the following to your app build.gradle file

  dependencies {      ...      compile 'com.android.support:RecyclerView-v7:24.2.0'  }  

or right click on your project, select "Open Module Settings", navigate to the "Dependencies" tab, and include the RecyclerView library from there. This way, you can be sure of importing the most recent RecyclerView library version available (as long as your android studio sdks are updated).

Sample Activity

We used the DataBinding pattern while developing the sample activities. If you are not familiar with developing using DataBinding, check out this excellent tutorial. All our sample activities are going to display a list of Person objects, and the Person object is defined below.

  public class Person {      private String firstname;      private String lastname;      private String role;      private String description;      private Drawable image;        public Person(){}        public Person(String fname, String lname, String role, String description, Drawable image) {          this.firstname = fname;          this.lastname = lname;          this.role = role;          this.description = description;          this.image = image;      }        public String getFirstname() {          return firstname;      }        public void setFirstname(String firstname) {          this.firstname = firstname;      }        public String getLastname() {          return lastname;      }        public void setLastname(String lastname) {          this.lastname = lastname;      }        public String getName() {          return firstname + " " + lastname;      }        public String getRole() {          return role;      }        public void setRole(String role) {          this.role = role;      }        public String getDescription() {          return description;      }        public void setDescription(String description) {          this.description = description;      }        public Drawable getImage() {          return image;      }        public void setImage(Drawable image) {          this.image = image;      }  }  

Also, we have created a Util class to abstract out the creation of List's of Person objects. It has two static methods getPeopleList(), and getRandomPerson().

Simple List Sample

RecyclerView - Simple List Activity

For our first sample, we'll create an activity called SimpleListActivity. This Activity would show a list of Person's, and we will include the Person's firstname and lastname in bold text, and the person's role in smaller text. The layout for each list item is shown below, with two TextViews.

  <?xml version="1.0" encoding="utf-8"?>  <layout      xmlns:android="http://ift.tt/nIICcg">        <data>          <import type="com.sample.foo.usingrecyclerview.Person"/>          <variable              name="person"              type="Person"/>      </data>        <LinearLayout          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:orientation="vertical">            <TextView              android:id="@+id/nameTextView"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:textSize="30sp"              android:text="@{person.firstname + ' ' + person.lastname}"/>            <TextView              android:id="@+id/roleTextView"              android:layout_width="match_parent"              android:layout_height="wrap_content"              android:textSize="20sp"              android:text="@{person.role}"/>      </LinearLayout>  </layout>  

The SimpleListActivity layout file contains a single RecyclerView.

  <?xml version="1.0" encoding="utf-8"?>  <layout      xmlns:android="http://ift.tt/nIICcg"      xmlns:tools="http://ift.tt/LrGmb4">        <RelativeLayout          android:layout_width="match_parent"          android:layout_height="match_parent"          android:paddingBottom="@dimen/activity_vertical_margin"          android:paddingLeft="@dimen/activity_horizontal_margin"          android:paddingRight="@dimen/activity_horizontal_margin"          android:paddingTop="@dimen/activity_vertical_margin"          tools:context="com.sample.foo.usingrecyclerview.SimpleListActivity">            <android.support.v7.widget.RecyclerView              android:id="@+id/recyclerView"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:scrollbars="vertical"              />      </RelativeLayout>  </layout>  

Simple List Activity

The SimpleListActivity class itself is also pretty straightforward. We set the contentview using DataBindingUtil, which gets us a reference to the RecyclerView.

  public class SimpleListActivity extends AppCompatActivity {        private ActivitySimpleListBinding mSimpleListBinding;      private RecyclerView.LayoutManager mLayoutManager;      private RecyclerView.Adapter mAdapter;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setTitle("Simple List");          mSimpleListBinding = DataBindingUtil.setContentView(                  this, R.layout.activity_simple_list);            List people = Util.getPeopleList(this);            mLayoutManager = new LinearLayoutManager(this);          mSimpleListBinding.recyclerView.setLayoutManager(mLayoutManager);            mAdapter = new SimpleListAdapter(people);          mSimpleListBinding.recyclerView.setAdapter(mAdapter);      }  }    

We populate our list with the Util.getPeopleList() method.

Note the two important things happening in the Activity.
Firstly, we specified that we want our RecyclerView to use the LinearLayoutManager, with the setLayoutManager method. RecyclerView has three built in LayoutManagers:

  1. LinearLayoutManager shows items in a vertical or horizontal scrolling list.
  2. GridLayoutManager shows items in a grid.
  3. StaggeredGridLayoutManager shows items in a staggered grid.

Secondly, we created and set the Adapter. You must create your own Adapter, since your adapter has to be unique to your dataset.

Creating the Adapter

The Adapter extends RecyclerView.Adapter, and contains three methods
onCreateViewHolder() – Here you inflate the View used for each list item
onBindViewHolder() – Here you bind values from your object to Views
getItemCount() – Returns the number of items in the list

Notice that we define our ViewHolder (SimpleViewHolder) inside the Adapter class. Keeps everything together.

  public class SimpleListAdapter extends RecyclerView.Adapter<SimpleListAdapter.SimpleViewHolder> {        private List<Person> mPeople;        public SimpleListAdapter(List<Person> people){          mPeople = people;      }        @Override      public SimpleViewHolder onCreateViewHolder(ViewGroup parent, int type) {          View v = LayoutInflater.from(parent.getContext())                  .inflate(R.layout.simple_list_item, parent, false);          SimpleViewHolder holder = new SimpleViewHolder(v);          return holder;      }        @Override      public void onBindViewHolder(SimpleViewHolder holder, int position) {          final Person person = mPeople.get(position);          holder.getBinding().setVariable(BR.person, person);          holder.getBinding().executePendingBindings();      }        @Override      public int getItemCount() {          return mPeople.size();      }        public static class SimpleViewHolder extends RecyclerView.ViewHolder {            private SimpleListItemBinding listItemBinding;            public SimpleViewHolder(View v) {              super(v);              listItemBinding = DataBindingUtil.bind(v);          }            public SimpleListItemBinding getBinding(){              return listItemBinding;          }      }  }  

You can see in the above class, in onCreateViewHolder, we simply inflate the required layout (R.layout.simple_list_item), and parse it to our SimpleViewHolder class. In onBindView, we set the binding variable to the current Person, and that's all.
If you are not using DataBinding methods, your ViewHolder implementation would look like

      public static class SimpleViewHolder extends RecyclerView.ViewHolder {            protected TextView nameTextView;          protected TextView roleTextView;            public SimpleViewHolder(View v) {              super(v);              nameTextView = ((TextView)findViewById(R.id.nameTextView));              roleTextView = ((TextView)findViewById(R.id.roleTextView));          }      }  

and your onBindViewHolder

      @Override      public void onBindViewHolder(SimpleViewHolder holder, int position) {          final Person person = mPeople.get(position);          holder.nameTextView(person.getName());          holder.roleTextView(person.getRole());      }  

RecyclerView and CardView

CardView extends the FrameLayout class and lets you show information inside cards that have a consistent look across the platform. CardView widgets can have shadows and rounded corners, and are very popular in Google apps (Google+, Google now, Youtube)

RecyclerView - Google apps

Before using CardView in your app, you must include the CardView library in your app build.gradle file, the same way you included the RecyclerView library above

  dependencies {      ...      compile 'com.android.support:cardview-v7:24.2.0'  }  

The CardView then becomes the base view for your list_item layout file. In our CardActivity sample, we have a card_list_item layout file.

  <?xml version="1.0" encoding="utf-8"?>  <layout xmlns:android="http://ift.tt/nIICcg"      xmlns:card_view="http://ift.tt/GEGVYd">        <data>            <import type="com.sample.foo.usingrecyclerview.Person" />            <variable              name="person"              type="Person" />      </data>        <android.support.v7.widget.CardView          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:layout_margin="5dp"          card_view:cardCornerRadius="@dimen/cardview_default_radius"          card_view:cardElevation="@dimen/cardview_default_elevation">            <RelativeLayout              android:layout_width="match_parent"              android:layout_height="match_parent"              android:padding="5dp">                <ImageView                  android:id="@+id/imageView"                  android:layout_width="60dp"                  android:layout_height="60dp"                  android:layout_alignParentRight="true"                  android:scaleType="fitXY"                  android:src="@{person.image}" />                <TextView                  android:id="@+id/nameTextView"                  android:layout_width="match_parent"                  android:layout_height="wrap_content"                  android:layout_toLeftOf="@id/imageView"                  android:text="@{person.firstname + ' ' + person.lastname}"                  android:textSize="22sp" />                <TextView                  android:id="@+id/roleTextView"                  android:layout_width="match_parent"                  android:layout_height="wrap_content"                  android:layout_below="@id/nameTextView"                  android:layout_toLeftOf="@id/imageView"                  android:text="@{person.role}"                  android:textSize="18sp" />                <TextView                  android:id="@+id/descriptionTextView"                  android:layout_width="match_parent"                  android:layout_height="wrap_content"                  android:layout_below="@id/roleTextView"                  android:text="@{person.description}"                  android:textSize="18sp" />          </RelativeLayout>      </android.support.v7.widget.CardView>  </layout>  

Amazingly, there is really no difference between the SimpleListActivity and SimpleListAdapter classes above and the CardActivity and CardAdapter classes for this sample. (Apart from the class names, and the layout files of course). Using databinding, we reference the relevant person attributes in the card_list_item layout file, and, voila, it just works.

RecyclerView and CardView

Recall that one of the advantages of RecyclerView we touted at the beginning of this tutorial was that it doesn't care about scroll direction, and/or layout of the items.

To use a GridLayout, you simply use the GridLayoutManager class. So, if you want a two column grid view for your list, for example, simply declare your LayoutManager as a GridLayoutManager, as shown below.

      mLayoutManager = new GridLayoutManager(this, 2);  

Similarly, to scroll your list horizontally, you set the LayoutManager orientation

      ((LinearLayoutManager) mLayoutManager).setOrientation(LinearLayoutManager.HORIZONTAL);      // OR      ((GridLayoutManager) mLayoutManager).setOrientation(GridLayoutManager.HORIZONTAL);  

Add/Remove Items

Our final activity will handle capturing click events, and adding and removing items from the list.

The click_list_item layout is identical to the card_list_item layout, but we added a remove button below the "@id/descriptionTextView".

              <Button                  android:id="@+id/exitButton"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_below="@id/descriptionTextView"                  android:layout_centerInParent="true"                  android:text="Remove" />  

and a FAB that adds a new Person when clicked.

          mClickBinding.insertFAB.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View view) {                  mAdapter.addPerson(Util.getRandomPerson(ClickActivity.this));                  ((LinearLayoutManager)mLayoutManager).scrollToPositionWithOffset(0, 0);              }          });  

We use the scrollToPositionWithOffset(0, 0) method to force the LayoutManager to scroll to the top of the List when an object is added to the list.

RecyclerView - Add and Remove CardViews

The Adapter is also pretty similar to the CardAdapter class declared above. However, we included the addPerson() method to enable adding a new Person, and we also included an onClickListener to handle the Remove Button click events.

      @Override      public void onBindViewHolder(final ClickViewHolder holder, final int position) {          final Person person = mPeople.get(holder.getAdapterPosition());          holder.getBinding().setVariable(BR.person, person);          holder.getBinding().executePendingBindings();            holder.getBinding().exitButton.setOnClickListener(new View.OnClickListener() {              @Override              public void onClick(View view) {                  mPeople.remove(holder.getAdapterPosition());                  notifyItemRemoved(holder.getAdapterPosition());              }          });      }        public void addPerson(Person person) {          mPeople.add(0, person);          notifyItemInserted(0);      }  

Note (Very Important)

Take a closer look at the onBindViewHolder method above. Note that we refer to the current Person object using holder.getAdapterPosition() rather than the (int) position variable. This is because, whenever we remove an item from the list, we must call notifyStateChanged() to sync the list count and the Adapter item count. However, notifyStateChanged() stops the item removal animation. holder.getAdapterPosition() is guaranteed to be correct always, whereas the parsed position could be erroneous.

Add and Remove CardView gif

Conclusion

While the ListView is still a very capable view, for new projects, I'll strongly advise you use RecyclerView, and consider the ListView as deprecated. I can't think of any situation where the ListView is better than the RecyclerView, even if you implement your ListView with the ViewHolder pattern. The RecyclerView is incredibly easy to use once you get the hang of it, and it's really worth the few minutes it takes you to experiment with the features so that you understand it's workings.

As always, the complete source for the sample app discussed in the tutorial above is available on github for use (and misuse) as you see fit.

Happy coding



from Android Authority http://ift.tt/2cr8Zr2
via IFTTT

Qualcomm Clear Sight technology could power more dual camera handsets

LG V20 hands on 38

Dual camera smartphones are in vogue this season, with Apple sporting a new design in its new iPhone 7 Plus, LG unveiling a similar look with its new V20, and not forgetting that Huawei made its own dual camera debut with the P9 not long ago. Mobile chip giant Qualcomm wants to help put more dual-camera smartphones on the market, having just announced its latest camera innovation known as Clear Sight.

Qualcomm's Snapdragon processors have supported multiple camera sensors for a couple of generations now. However, the company's new Clear Sight technology is only available for devices that use its Snapdragon 820 and 821 processors, as it relies on Qualcomm's advanced Spectra Image Signal Processor built into these chips.

Clear Sight consists of a single, fully integrated hardware module that contains two cameras, plus computational low light imaging algorithms that enable Qualcomm Spectra ISPs, designed to take photos at the exact same time and merge the two photos together, instantaneously, with outstanding image quality even in low lighting.

Clear Sight is designed with a very specific camera configuration in mind. It doesn't opt for a telephoto lens like the new iPhone or a separate wide-angle lens like LG. Instead, it works using one color and one monochrome sensor, much like the Huawei P9. Although that phone uses the company's own Kirin 955 SoC. The filter over the black and white sensor allows for up to three times more light capture, which can then be processed in software alongside the regular color image to improve dynamic range, sharpness, and reduce noise. It has the added benefit of being able to focus on a subject faster as well and improving low light performance.

Qualcomm Clear Sight module

Qualcomm's Spectral ISP allows for the merging and processing of data from two image sensors using the company's dedicated algorithms, without having to load down the main processor cores. This should be beneficial not only for performance, but also for battery life.

Qualcomm hasn't announced any other details about the Clear Sight module yet, such as camera specifications, nor has the company mentioned any smartphone hardware partners either. Still, Qualcomm is offering another fast-track route for smartphone manufacturers looking to implement cutting edge camera technologies that I'm sure someone will take up, given the popularity of the Snapdragon 820.



from Android Authority http://ift.tt/2c8w26V
via IFTTT

CloudMagic has ‘graduated’ and is now going by the name ‘Newton’

Just as slinging a tassel across your hat and grabbing an elegant piece of paper won't necessarily give you new abilities, such is the case with the email app formerly known as CloudMagic. However, the email client is getting a title and what its developers believe is the right to command a premium salary.

CloudMagic is "graduating to be a more mature product and identity," according to its developers. As such, the multi-platform app has been rebranded "Newton" and is going "free to paid."

Email best Android email appsSee also: 14 best Android email apps91

Beyond a new name, Newton looks and feels a lot like CloudMagic. There are some minor aesthetic changes here and there, but the majority of features its developers believe warrant the premium price tag were rolled out months ago as the three-year-old app matured to what it is today.

Features filling out the qualifications and experience sections of Newton's resume include its ability to snooze messages and check them later, schedule delivery times for messages, call back emails before they embarrass you and to notify you when a recipient reads a message. Newton still has its Cards feature as well, though the workflow notifications system has been rebranded as Connected Apps. And Newton still has Sender Profile, too.

netwton-email

Sender Profiles are cards that compile a quick profile of people who send messages to you. Sender Profiles give you a rundown on a sender's credentials, so you don't have to burn time Googling people before determine if you're going to reply or ignore.

While they say they felt CloudMagic was worthy of a premium price tag, Newton's developers reasoned that they wanted to build out the email client first because they were concerned they'd have a difficult time touting app's foundation. The app's email aggregation software is all in the cloud and it's true that it can be difficult to sell consumers on backend features, hidden from public view.

If you'd like to put Newton in charge of aggregating emails from all of your accounts, you'll have to pay it a salary of $50 a year. It'll intern for you for free for 14 days. But after that, you'll have to pay for its work. Those who were previously CloudMagic users will be privy to the same 14-day trial upon update.

Newton is available now on Android, iOS and Mac. If you already bought Sender Profile or the Mac app, you'll get a free year of Newton.

Get it on Google Play


from Android Authority http://ift.tt/2cN7p1g
via IFTTT