LightBlog

lundi 3 octobre 2016

Samsung Galaxy On8 goes on sale costing just Rs.14,900 ($225)

Samsung Galaxy On8

Following the handset's unveiling at the end of last month, the Samsung Galaxy On8 is now on sale in India through retailer Flipkart. The smartphone has turned out to be a rather good deal for Samsung fans looking for a new mid-ranger, as the On8 boasts some reasonable specifications and costs just Rs. 14,900 ($225).

However, Flipkart is only selling the Galaxy On8 at this price for a limited time. The regular retail price will be set ever so slightly higher at Rs. 15,900 ($240). Flipkart also mentions that it will be limited order quantities to just 1 device per customer for 30 days. To sweeten the deal, the retailer is also throwing in a free 32GB Samsung microSD card.

Here's a breakdown of the Galaxy On8's specifications:

  • Operating System: Android Marshmallow 6.0
  • Display: 5.5-inch Full HD (1920 x 1080) sAMOLED
  • Processor: 1.6GHz Exynos 7580 Octa-Core Processor
  • RAM: 3GB
  • Internal Storage: 16GB; expandable up to 128GB using a microSD card
  • Rear Camera: 13MP AF | f1.9 | LED Flash
  • Front Camera: 5MP | f1.9 | LED Flash
  • Dimensions: 151.7 x 76.0 x 7.8mm
  • Weight: 169 g
  • Battery: 3300mAh

The Galaxy On8 is being sold in Black, Gold, and White color options, although only the Gold model is currently still left in stock at this reduced price point. Samsung hasn't stated whether or not the smartphone will go on sale outside of India, but there's a good chance that this handset could appeal to mid-range customers in other markets too.

Buy the Galaxy On8 from Flipkart


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

Samsung ready to put the Note 7 recall behind it, worldwide sales to resume “soon”

samsung galaxy note 7 aa autom3otices ryan vergara (18 of 23)

The sale of 30,000 Samsung Galaxy Note 7 units two days after the handset's return to South Korean stores seems to be a good omen for Samsung Electronics. That is why the Korean phone maker appears eager to avoid further delays and restart the sales of its latest flagship globally.

samsung galaxy note 7 review aa (2 of 20)See also: Galaxy Note 7 sales could resume in early October24

Samsung announced today that the Galaxy Note 7 will soon be back on sale again in worldwide markets. However, it remains unclear whether reports of Note 7 replacements overheating and catching fire have been resolved already.

What started as a grand debut for the smartphone ended in a massive recall of the handsets sold worldwide following discovery of a manufacturing defect that caused the battery to overheat and explode. To add insult to injury, consumers slammed Samsung for mishandling the voluntary recall program.

Samsung's finances and reputation were hit the hardest as a result of the battery fiasco. But the mishap didn't seem to dampen the company's spirit in pushing the Galaxy Note 7 to consumers. And for good reason: Samsung says it has placed the necessary precautions to ensure users receive what is supposed as a safe replacement.

  • Samsung Galaxy Note 7 Review
  • Samsung Galaxy Note 7 hands-...

Some of these precautions include a green battery icon on the Status Bar, the Always On Display screen and the Power Off prompt screen. To help consumers confirm that their units came from the safe batch, Samsung also launched an online IMEI checker.

After a report in China indicated that a replacement phone still caught fire after overheating, the company said it would investigate the matter, though it wouldn't wait for the results before kicking off the global restart of Galaxy Note 7 sales.

The question now is whether Samsung Galaxy Note 7 remains a crowd-favorite. We'll see when the company reports its earnings for the third quarter of its fiscal year 2016.



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

USB publishes new Audio Class 3.0 spec for phones without a 3.5mm jack

USB Type C audio jack

The 3.5mm jack has already begun disappearing from many a new smartphone, and USB-IF, the group behind the connector standard, has now published its USB Audio Device Class 3.0 (ADC 3.0) specification, which offers up a more definitive set of guidelines for those looking to send audio over USB Type-C.

According to the group, this new specification is primarily about allowing manufacturers to remove the old 3.5mm jack socket, while also enabling slimmer devices, improved water resistance, and new digital audio features. The new 3.0 audio specification is also designed to improve power efficiency and key word detection for better voice recognition.

usb-c-audio

Importantly, the USB Audio Device Class 3.0 continues to support both analog and digital audio. The two secondary bus (SBU) pins are still allowed to be used for non-digital audio transfer, so device manufacturers can continue to provide Type-C to 3.5mm adaptors to support existing headphones. In fact, all spec compliant hosts will have to support these "headset adaptor devices" going forward, so current headphones will continue to work with USB only smartphones.

The specification also reveals a little about what we can expect from upcoming USB headphones and audio accessories. Apparently, these devices will feature multi-function processing units (MPUs), which will define the features available from the audio hardware. Usage examples include host syncronization, digital-to-analog conversion, noise cancellation, equalization, and built-in microphone controls. As an extension to these new MPUs, the new USB audio specification also outlines new Power Domain and power saving features. This allows devices to be put into various sleep modes to lower power consumption, and features new BADD profiles for more efficienct discovery and management of connected devices.

As far as digital audio quality goes, USB ADC 3.0 compatible devices will support the latest USB Audio Type-III and Type -IV compression formats. They will also retain backwards compatibility with the ADC 1.0 and 2.0 specifications, which are currently used by a number of third party DACs.

USB Type-C cableSee also: USB-IF announces certification program for USB Type-C chargers4

The importance of a certified USB Type-C audio specification cannot be overstated. Both customers and accessory manufacturers can now be confident that upcoming headphones and other audio products will be compatible with all devices that conform to the same USB specification. However, this certainly doesn't mean that consumers are going to rush to ditch the 3.5mm jack, if the launch reception for the new iPhone 7 and Moto Z range are anything to go by. Despite the unveiling of this unifying specification, we may see a growing split between manufacturers ditching and those sticking with the trusty 3.5mm socket.



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

Introducing Charged.io: Official launch and DJI Mavic Pro giveaway!

When I started at Android Authority almost five years ago, Google's mobile operating system was already successful. Sure, it was far from the mature and complex ecosystem we know and love today, but in 2012, it was very clear that Android is the future. I was very lucky to be part of it, and in 2016 I consider myself incredibly lucky to be able to follow the next revolution on Charged.io.

Introducing Charged.io

charged logo

Electric vehicles, autonomous driving systems, drones, space explorations and green power. These are just a few of the topics that we'll cover on Charged, the newest site in the Android Authority family.

Joining TabTimes, SoundGuys, VRSource, and of course Android Authority, Charged is an online publication dedicated to documenting the rise of modern transportation and green power technologies, and their impact on our lives and society.

We aim to establish Charged as your reference source for the intersection of technology and transportation. You can expect timely news on the latest developments related to EVs, self-driving cars, Hyperloop, drones, and even space exploration; in-depth comparisons of the most desirable vehicles and drones on the market; guides that will help you pick your next purchase; and accurate and balanced reviews and drive tests.

At Charged, we believe that the future of humanity is green, smart, and connected, and we're dedicated to promoting and spreading awareness of the people, organizations and companies that bring us closer to this future.

Get to know us

Charged.io has been online since July 2016, but today we're launching it officially. You're invited to join our community of transportation technology enthusiasts! We're only scratching the surface in terms of coverage, so drop us a line if you want to have a say in how the site develops and grows.

Visit Charged.io and follow us on social media to keep up with our coverage.

DJI Mavic Pro giveaway

dji mavic pro (1)

The Mavic Pro is smart, fast, and agile. We aim to be just like that in our coverage, so we decided that this brand new drone from DJI is the ideal prize for our introductory giveaway.

Enter the giveaway on Charged.io

Here's to Charged – The Future Is Here!



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

How to build an image gallery app – full tutorial with code

P1000207

There are many reasons you might find yourself needing to create an image gallery – whether it's to show off album covers for a music app, to present feature images for articles in a feed, or to showcase your work in a portfolio. To make the right impression though, these apps should allow users to effortlessly swipe through multiple images without slowdown and that's where things get a little tricky.

This tutorial will show you how to create a seamless gallery filled with nice big images and then adapt that for a number of different applications. Along the way, we'll see how to use RecyclerViews, adapters and Picasso – so hopefully it will make for a great learning exercise, whatever you end up doing with it! Full code and project included below…

recyclerview-featuredSee also: Using RecyclerView to build lists in Android

Introducing RecyclerView

To create our Android gallery, we're going to use something called a RecyclerView. This is a handy view that acts very much like a ListView but with the advantage of allowing us to scroll quickly through large data sets. It does this by only loading the images that are currently in view at any given time. This means we can load more images without the app becoming very slow. There's a lot more that you can do with this view and it's used all over Google's own apps, so check out the full explanation to using RecyclerView to find out more.

The good news is that this is all we really need to create our gallery – a RecyclerView filled with images. The bad news is that the RecyclerView is a little more complicated than most other views. Because of course it is.

RecyclerView is not, for starters, available to drag and drop using the design view. So we'll just have to add it to the activity_main.xml, like so:

  <android.support.v7.widget.RecyclerView              android:id="@+id/imagegallery"              android:layout_width="match_parent"              android:layout_height="match_parent"              />  

Notice that we're referencing the Android Support Library. This means we also need to modify our build.gradle in order to include the dependency. Just add this line to the app level file:

  compile 'com.android.support:recyclerview-v7:24.2.1'  

And if that's not installed, then you're going to have to open the SDK manager and install it. Fortunately, Android Studio is pretty smart about prompting you to do all this. I just got a new computer, so I can play along with you!

Support repository

Head back to the XML and it should now be working just fine. Except the list is not populated except with 'item 1, item 2, item 3'. What we need to do, is load our images into here.

working list

Creating your list of images

As mentioned, populating our recycler view is a little more complicated than using a regular list. By which, I mean it's way more complicated… but it's a great chance for us to learn some handy new skills. So there's that.

For a RecyclerView, we're also going to need a layout manager and an adapter. This is what's going to allow us to organize the information in our view and add the images. We'll start by initializing our views and attaching an adapter in the onCreate of MainActivity.java. This looks like so:

  setContentView(R.layout.activity_main);    RecyclerView recyclerView = (RecyclerView)findViewById(R.id.imagegallery);  recyclerView.setHasFixedSize(true);    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2);  recyclerView.setLayoutManager(layoutManager);  ArrayList<CreateList> createLists = prepareData();  MyAdapter adapter = new MyAdapter(getApplicationContext(), createLists);  recyclerView.setAdapter(adapter);  

We're setting the layout as activity_main, then we're finding the RecyclerView and initializing it. Notice that we use HasFixedSize to make sure that it won't stretch to accommodate the content. We're also creating the layout manager and the adapter here. There are multiple types of layout manager but true to gallery-form, we're going to pick a grid rather than a long list. Remember to import the GridLayoutManager and the RecyclerView as Android Studio prompts you to do so. Meanwhile, when you highlight MyAdapter, you'll be given the option to 'Create Class MyAdapter'. Go for it – make your own MyAdapter.Java and then switch back. We'll come back to this later.

Before we can use the new adapter class, we first need to create our data set. This is going to take the form of an array list. So in other words, we're going to place a list of all our images in here, which the adapter will then read and use to fill out the RecyclerView.

Just to make life a little more complicated, creating the Array List is also going to require a new class. First though, create a string array and an integer array in the same MainActivity.Java:

  private final String image_titles[] = {          "Img1",          "Img2",          "Img3",          "Img4",          "Img5",          "Img6",          "Img7",          "Img8",          "Img9",          "Img10",          "Img11",          "Img12",          "Img13",  };    private final Integer image_ids[] = {          R.drawable.img1,          R.drawable.img2,          R.drawable.img3,          R.drawable.img4,          R.drawable.img5,          R.drawable.img6,          R.drawable.img7,          R.drawable.img8,          R.drawable.img9,          R.drawable.img10,          R.drawable.img11,          R.drawable.img12,          R.drawable.img13,  };  

The strings can be anything you want – these will be the titles of your images. As for the integers, these are image IDs. This means they need to point to images in your Drawables folder. Drop some images into there that aren't too massive and make sure the names are all correct.

Remember: a list is a collection of variables (like strings or integers), whereas an array is more like a filing cabinet of variables. By creating an ArrayList then, we're basically creating a list of filing cabinets, allowing us to store two collections of data in one place. In this case, the data is a selection of image titles and image IDs.

Now create a new Java Class called CreateList and add this code:

  public class CreateList {        private String image_title;      private Integer image_id;        public String getImage_title() {          return image_title;      }        public void setImage_title(String android_version_name) {          this.image_title = android_version_name;      }        public Integer getImage_ID() {          return image_id;      }        public void setImage_ID(Integer android_image_url) {          this.image_id = android_image_url;      }  }  

What we have here is a method we can use to add new elements (setImage_title, setImage_ID) and retrieve them (getImage_title, getImage_ID). This will let us run through the two arrays we made and stick them into the ArrayList. You'll need to import array lists.

We do this, like so:

      private ArrayList<CreateList> prepareData(){            ArrayList<CreateList> theimage = new ArrayList<>();          for(int i = 0; i< image_titles.length; i++){              CreateList createList = new CreateList();              createList.setImage_title(image_titles[i]);              createList.setImage_ID(image_ids[i]);              theimage.add(createList);          }          return theimage;      }  }  

So we're performing a loop while we go through all the image titles and adding them to the correct array in the ArrayList one at a time. Each time, we're using the same index (i), in order to add the image ID to its respective location.

P1000208

Confused yet?

Using the adapter

Before you head over to MyAdapter.java, you first need to create a new XML layout in the layout directory. I've called mine cell_layout.xml and it looks like so:

  <LinearLayout xmlns:android="http://ift.tt/nIICcg"      android:orientation="vertical"      android:background="#FFFFFF"      android:layout_width="match_parent"      android:layout_height="wrap_content">      <ImageView          android:id="@+id/img"          android:adjustViewBounds="true"          android:layout_width="match_parent" />      <TextView          android:id="@+id/title"          android:layout_gravity="center"          android:textColor="#000"          android:textStyle="bold"          android:layout_width="wrap_content"          android:layout_height="wrap_content" />  </LinearLayout>  

All this is, is the layout for the individual cells in our grid layout. Each one will have an image at the top, with text just underneath. Nice.

Now you can go back to your MyAdapter.java. This is where we're going to take the list, take the cell layout and then use both those things to fill the RecyclerView. We already attached this to the RecyclerView in MainActivity.Java, so now all that's left is… lots and lots of complex code.

It's probably easiest if I just show you…

  public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {      private ArrayList<CreateList> galleryList;      private Context context;        public MyAdapter(Context context, ArrayList<CreateList> galleryList) {          this.galleryList = galleryList;          this.context = context;      }        @Override      public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {          View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout, viewGroup, false);          return new ViewHolder(view);      }        @Override      public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {          viewHolder.title.setText(galleryList.get(i).getImage_title());          viewHolder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);          viewHolder.img.setImageResource((galleryList.get(i).getImage_ID()));              }        @Override      public int getItemCount() {          return galleryList.size();      }        public class ViewHolder extends RecyclerView.ViewHolder{          private TextView title;          private ImageView img;          public ViewHolder(View view) {              super(view);                title = (TextView)view.findViewById(R.id.title);              img = (ImageView) view.findViewById(R.id.img);          }      }  }  

So what we're doing here is to get our ArrayList and then create a ViewHolder. A ViewHolder makes it easier for us to iterate lots of views without having to write findViewByID every time – which would be impractical for a very long list.

We create the VewHolder by referencing the cell_layout file we created earlier, and then bind it with the data from our ArrayList. We find the TextView first and set that to be the relevant string, then we find the ImageView and use the image ID integer to set the image resource. Notice that I've also setScaleType to CENTER_CROP. This means that the image will be centered but cropped to fill the enter cell in a relatively attractive manner. There are other scale types but I believe that this is by far the most attractive for our purposes.

Don't forget to import the ImageView and TextView classes. And remember you need to add some images to your drawables folder. Once you've done that though you should be ready to go!

Give it a try and you should end up with something that looks a little like this:

Screenshot_20160929-124324

Except without all the pictures of me… This is just what I happened to have to hand, don't judge!

Not working as expected? Don't worry – this is a pretty complicated app for beginners. You can find the full thing over at GitHub here and then just work through each step while referring to the code.

displaying-data-in-cardviews-and-gridviews-16x9-720pSee also: Displaying large amounts of data with GridView and CardView2

Making this into a useful app

So right now we have a strange slideshow of photos of me. Not really a great app…

So what might you use this code for? Well, there are plenty of apps that essentially boil down to galleries – this would be a great way to create a portfolio for your business for example, or perhaps a visual guide of some sort.

In that case, we might want to add an onClick so that we can show some information, or perhaps a larger version of the image when someone taps their chosen item. To do this, we just need to import the onClickListener and then add this code to onBindViewHolder:

  viewHolder.img.setOnClickListener(new OnClickListener() {      @Override      public void onClick(View v) {          Toast.makeText(context,"Image",Toast.LENGTH_SHORT).show();      }  });  

If we wanted to load a selection of photos on the user's device meanwhile, we'd simply have to list files in a particular directory. To do that, we'd just need to use listFiles to take the file names and load them into our ListArray list, using something list this:

  String path = Environment.getRootDirectory().toString();  File f = new File(path);  File file[] = f.listFiles();  for (int i=0; i < file.length; i++)  {      CreateList createList = new CreateList();      createList.setImage_Location(file[i].getName());  }  

Except you'll be changing your path string to something useful, like the user's camera roll (rather than the root directory). Then you can load the bitmaps from the images on an SD card or internal storage by using the image name and path, like so:

  Bitmap bmp = BitmapFactory.decodeFile(pathName);  ImageView img;  img.setImageBitmap(bmp);  

You'll probably want to get thumbnails from them too. This way, the list will be populated dynamically – so that when new photos are added to that directory, you're gallery will update to show them each time you open it. This is how you might make a gallery app for displaying the images on a user's phone, for example.

Or alternatively, another way we could make this app a little fancier, would be to download images from the web.

This might sound like a whole extra chapter but it's actually pretty simple as well. You just need to use the Picasso library, which is very easy and completely free. First, add the dependency like we did earlier:

  compile 'com.squareup.picasso:picasso:2.5.0'  

Then, change your ArrayList to contain two string arrays instead of a string and an integer. Instead of image IDs, you're going to fill this second string array with URLs for your images (in inverted commas). Now you just swap out the line in your onBindViewHolder to:

  Picasso.with(context).load(galleryList.get(i).getImage_ID()).resize(240, 120).into(viewHolder.img);  

Remember to add the relevant permission and it really is that easy – you can now download your images right from a list of URLs and that way update them on the fly without having to update the app! Picasso will also cache images to keep things nice and zippy for you.

Note as well that if you wanted to have more than two images per row, you would simply swap:

  RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),2);  

For:

  RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),3);  

This will give you something like the following:

Screenshot_20160929-125455

If you don't like the text and you just want images, then you can easily remove the string array from proceedings. Or for a quick hack if you don't want to stray too far from my code, you can just make the TextView super thin.

Screenshot_20160929-130924-16x9-720p

Closing comments

And there you have it – your very own basic image gallery. There are plenty of uses for this and hopefully you've learned a few useful bits and pieces along the way. Stay tuned for more tutorials just like this one!

And remember, the full project can be found here for your reference.

P1000209



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

EU expected to fine Google over anti-competitive Android practices

Google Apps

The European Union's anti-trust regulators have been investigating Google and its Android operating system in regard to anti-competitive practises for almost two years now, and decided to file formal charges back in April. A 150 page document, which contains a charge sheet, sent to the complainants last week reveals that the Commission is preparing to slap Google with a hefty fine.

The European Commission launched its investigation into Google after it received a complaint from FairSearch that Google offers financial incentives and punishing term of usage to smartphone manufacturers who pre-install Google Search and other apps exclusively on their handsets. The EU competition enforcer plans to compel Google to halt payments or discounts to mobile phone manufacturers in return for pre-installing the Play Store.

The document also reveals that regulators want to prevent Google from cajoling manufacturers into installing proprietary apps, such as Maps, Docs, and Search, if Google plans to continue to restrict their ability to install a competing Android-based operating system. Currently, many forked versions of Android, such as Tizen or CyanogenMod, do not come bundled with Google apps because of licensing restrictions. Google was recently fined $6.75 million for similar charges brought in Russia.

The Commission intends to set the fine at a level which will be sufficient to ensure deterrence

As for financial penalties, the document doesn't set a specific amount, but the company can expect a large fine because these practices have been ongoing since January 2011 and are still running today, according to the document.

The financial penalty could be based on the amount of ad revenue that Google has generated through AdWord clicks from European customers, or perhaps from Play Store app purchases and AdMob's in-app advertisements.

The European Commission has declined to comment on the document, but Google appears determined to fight the charges. Google intends to argue that its Android business model is designed in a way that benefits both consumers and innovation.

"We look forward to showing the European Commission that we've designed the Android model in a way that's good for both competition and consumers, and supports innovation across the region." – Google

In addition to the case against Android, the European Commission has also charged Google with favoring its own shopping services over those of its rivals. This case is also expected to hit Google with a fine, and the company may be forced into ranking rival shopping services using the same methods as it does for its own, along with potentially allowing Google to charge competitors to display their services more prominently. This cost would likely be kept artificially low, by pegging it to Google's operating costs or the lowest reserve price for AdWords, which currently sits at 0.01 euro per click.

The European Commission has stepped up its rhetoric against Google this year, but has appeared rather inconsistent in its message. For instance, Margrethe Vestager, the European Commissioner for Competition, earlier in the year admitted that Google has played a significant role in smartphone innovation and didn't "want to take away the rewards Google has got from that". However, she is now fining the company for cultivating a user experience than enables app developers to put their products in front of billions of smartphone customers.

EU Commissioner for Competition Margrethe VestagerSee also: EU anti-trust commissioner repeats old mantra that Google is stifling innovation47

The case also seems to ignore that companies like Amazon and Samsung have taken Android and used it for their own growing product portfolios, without offering consumers a way to opt back in to Google's services if they prefer them. There's also no parallel investigation into Apple's tight grip over the iOS app store and services either.

This latest anti-trust case is not over yet, but rightly or wrongly, it's looking increasingly likely that Google will be stuck with a notable fine and some regulatory control over its Android operating system.



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

Sony Xperia XZ goes on sale in the US for $700, sans fingerprint scanner

sony xperia xz ifa 2016 aa-11

Although Sony Mobile may not be a stellar name in the United States, the company continues to tempt the market with new products every so often. Sony Xperia XZ, the latest flagship from the Japanese company, just went on sale in the U.S. for $699.99.

Sony announced a little more than a week ago that Xperia XZ was up for pre-orders, without relying on U.S. carriers to distribute the phone. Instead, the company partnered with online retail giant Amazon to market the handsets.

It is notable, however, that Amazon removed the Forest Blue variant from its offerings, despite including the model in its list during the pre-order phase. It is not quite clear why Sony or Amazon would narrow down the color options for consumers in the U.S., leaving only the Graphite Black and Platinum variants in stock.

As a reminder, Sony Xperia XZ sports a Gorilla Glass 4 5.2-inch full HD display and packs a Snapdragon 820 processor, 3GB of RAM and 32GB of internal storage under the hood. It boasts a 23MP rear camera and a and IP65/68 water resistance feature.

  • Sony Xperia XZ Hands On at I...
  • Sony Xperia X Compact Hands ...

The handset also features a USB Type-C port, though the fingerprint sensor that's present in international models is missing in the U.S. version. As Brian Reigh notes in another post, it is quite odd that Sony would decide to leave out the fingerprint scanner at a time when almost all other phone makers are slapping it onto their products.

The absence of a fingerprint scanner, plus the hefty price tag of Sony Xperia XZ, might not help uplift Sony Mobile's lackluster business in the U.S. After all, U.S. consumers already have cheaper options of devices with the same or even superior features.

Would you be buying Sony Xperia XZ now that it is up for sale through Amazon? Let us know your thoughts in the comments.

Get it from Amazon


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