The forthcoming Huawei P8 smartphone, expected to be announced as the company's next flagship at an April 15th event, surfaced in a filing with TENAA, the Chinese equivalent to the FCC. Besides the information about specs that are included in the filing, Huawei also supplied several images giving us an official look at the device. […]

Yesterday, AT&T launched its super-fast U-verse GigaPower Internet service in Cupertino, pipping Google Fiber to the Silicon Valley city post. In terms of pricing, GigaPower starts at $80 per month for 300Mbps Internet, peaking at $110 per month for 1Gbps. Adding the TV service bumps the price up to $150, while a phone line brings […]

Samsung has announced a new Chef Collection series item that brings the cutting-edge technology of their popular smartphone devices to the cutting-edge technology of kitchen devices. The Samsung Galaxy BLADE edge is the first smart knife that also has smartphone capabilities. The Galaxy BLADE edge comes with all of the features of the Galaxy S6, […]

26 Mar 2015

Today, we want to share some best practices on using the OpenGL Shading Language (GLSL) that can optimize the performance of your game and simplify your workflow. Specifically, Layout qualifiers make your code more deterministic and increase performance by reducing your work.

Let's start with a simple vertex shader and change it as we go along.

This basic vertex shader takes position and texture coordinates, transforms the position and outputs the data to the fragment shader:

Vertex Attribute Index

To draw a mesh on to the screen, you need to create a vertex buffer and fill it with vertex data, including positions and texture coordinates for this example.

In our sample shader, the vertex data may be laid out like this:

struct Vertex
{
Vector4 Position;
Vector2 TexCoords;
};

Therefore, we defined our vertex shader attributes like this:

attribute vec4 vertexPosition;
attribute vec2 vertexUV;

To associate the vertex data with the shader attributes, a call to glGetAttribLocation will get the handle of the named attribute. The attribute format is then detailed with a call to glVertexAttribPointer.

25 Mar 2015

Have you ever wanted to develop apps for the car, but found the variety of OEMs and proprietary platforms too big of a hurdle? Now with Android Auto, you can target a single platform supported by vehicles coming soon from 28 manufacturers.

Using familiar Android APIs, you can easily add a great in-car user experience to your existing audio apps, with just a small amount of code. If you're new to developing for Auto, watch this DevByte for an overview of the APIs, and check out the training docs for an end-to-end tutorial.

Playback and custom controls

Custom playback controls on NPR One and iHeartRadio.

The first thing to understand about developing audio apps on Auto is that you don't draw your user interface directly. Instead, the framework has two well-defined UIs (one for playback, one for browsing) that are created automatically. This ensures consistent behavior across audio apps for drivers, and frees you from dealing with any car specific functionalities or layouts. Although the layout is predefined, you can customize it with artwork, color themes, and custom controls.

Both NPR One and iHeartRadio customize their UI. NPR One adds controls to mark a story as interesting, to view a list of upcoming stories, and to skip to the next story. iHeartRadio adds controls to favorite stations and to like songs. Both apps store user preferences across form factors.

Because the UI is drawn by the framework, playback commands need to be relayed to your app. This is accomplished with the MediaSession callback, which has methods like onPlay() and onPause(). All car specific functionality is handled behind the scenes. For example, you don't need to be aware if a command came from the touch screen, the steering wheel buttons, or the user's voice.

Browsing and recommendations

Browsing content on NPR One and iHeartRadio.

The browsing UI is likewise drawn by the framework. You implement the MediaBrowserService to share your content hierarchy with the framework. A content hierarchy is a collection of MediaItems that are either playable (e.g., a song, audio book, or radio station) or browsable (e.g., a favorites folder). Together, these form a tree used to display a browsable menu of your content.

With both apps, recommendations are key. NPR One recommends a short list of in-depth stories that can be selected from the browsing menu. These improve over time based on user feedback. iHeartRadio's browsing menu lets you pick from favorites and recommended stations, and their "For You" feature gives recommendations based on user location. The app also provides the ability create custom stations, from the browsing menu. Doing so is efficient and requires only three taps ("Create Station" -> "Rock" -> "Foo Fighters").

When developing for the car, it's important to quickly connect users with content to minimize distractions while driving. It's important to note that design considerations on Android Auto are different than on a mobile device. If you imagine a typical media player on a phone, you may picture a browsable menus of "all tracks" or "all artists". These are not ideal in the car, where the primary focus should be on the road. Both NPR One and iHeartRadio provide good examples of this, because they avoid deep menu hierarchies and lengthy browsable lists.

Voice actions for hands free operation

Voice actions (e.g., "Play KQED") are an important part of Android Auto. You can support voice actions in your app by implementing onPlayFromSearch() in the MediaSession.Callback. Voice actions may also be used to start your app from the home screen (e.g., "Play KQED on iHeartRadio"). To enable this functionality, declare the MEDIA_PLAY_FROM_SEARCH intent filter in your manifest. For an example, see this sample app.

Next steps

NPR One and iHeartRadio are just two examples of great apps for Android Auto today. They feel like a part of the car, and look and sound great. You can extend your apps to the car today, too, and developing for Auto is easy. The framework handles the car specific functionalities for you, so you're free to focus on making your app special. Join the discussion at http://g.co/androidautodev if you have questions or ideas to share. To get started on your app, visit developer.android.com/auto.

19 Mar 2015

People don't think of their location in terms of coordinates on a map. They want context on what shops or restaurants they're at, and what's around them. To help your apps speak your users' language, we're launching the Places API for Android, as well as opening a beta program for the Places API for iOS.

The Places API web service and JavaScript library have been available for some time. By providing native support for Android and iOS devices, you can optimize the mobile experience with the new APIs by taking advantage of the device's location signals.

The Places APIs for Android and iOS bridge the gap between simple geographic locations expressed as latitude and longitude, and how people associate location with a known place. For example, you wouldn't tell someone you were born at 25.7918359,-80.2127959. You'd simply say, "I was born in Jackson Memorial Hospital in Miami, Florida." The Places API brings the power of Google's global places database into your app, providing more than 100 million places, like restaurants, local businesses, hotels, museums, and other attractions.

Key features include:

Add a place picker: a drop-in UI widget that allows your users to specify a place

Get the place where the user is right now

Show detailed place information, including the place's name, address, phone number, and website

Use autocomplete to save your users time and frustration typing out place names, by automatically completing them as they type

Make your app stand out by adding new places that are relevant to your users and seeing the places appear in Google's Places database

Improve the map around you by reporting the presence of a device at a particular place.

To get started with the Places API for Android, watch this DevByte, check out the developer documentation, and play with the demos. To apply for the Places API for iOS beta program, go here.