22 Aug 2019

feedTalkAndroid

Say goodbye to Android Q and hello to Android 10

Mark today as the day that Android for geeks and enthusiasts died, and the day that the world's most popular operating system turned into Apple finally matured. The enjoyable pastime of guessing if Android Q would be known as Qi Lime Pie is at an end, with Google's announcement that it will instead be known […]


Come comment on this article: Say goodbye to Android Q and hello to Android 10

Visit TalkAndroid

22 Aug 2019 3:09pm GMT

feedAndroid Community

Xbox Elite Controller support over USB on Android possible soon

Not many people may be using an XBOX Elite controller but when support for such is added to your favorite gaming console, then we pay attention. A few months ago, we reported the NVIDIA SHIELD added wired XBOX Elite controller support. Today, the Android team has announced that it's bringing controller mapping for the Xbox […]

22 Aug 2019 3:00pm GMT

feedTalkAndroid

LG launches new K50S and K40S phones, offering tons of features on a budget

LG's first announcement at IFA 2019 won't be a flagship, but instead a refresh of their budget K series line of phones. They're bringing several flagship features down to the wallet-friendly line, and both new phones have spacious screens. First up is the K50S, the higher-end of the two phones. You're getting a large 6.5-inch […]


Come comment on this article: LG launches new K50S and K40S phones, offering tons of features on a budget

Visit TalkAndroid

22 Aug 2019 2:55pm GMT

Recover deleted information from your Android smartphone with EaseUS’s MobiSaver recovery software

Have you ever accidentally deleted a super important text message that you realized you'll need tomorrow? Lost a ton of contacts because something went sideways on your phone, like your SD card going bad? That's a reason to panic, we get it. But you don't have to freak out. There's an easy way to recover […]


Come comment on this article: Recover deleted information from your Android smartphone with EaseUS's MobiSaver recovery software

Visit TalkAndroid

22 Aug 2019 2:30pm GMT

feedAndroid Community

Google Nest Mini may come with aux jack, built-in wall mount

Ever since the Google Nest acquisition happened some five years ago, we've seen a number of Nest products. It was only recently that Google has started testing out "Move to" controls on Nest Hub which could mean further integration of the two brands. It was only yesterday when we learned Nest users can now migrate […]

22 Aug 2019 2:00pm GMT

feedTalkAndroid

Download the ASUS ROG Phone II’s wallpapers here

Just because your handset isn't an actual gaming smartphone doesn't mean that you can't gamify your current handset with some snazzy new wallpapers from the recently announced ASUS ROG Phone 2. ASUS's follow-up to the ROG Phone gaming handset will have its European launch at a press event during IFA 2019 on September 4th, but […]


Come comment on this article: Download the ASUS ROG Phone II's wallpapers here

Visit TalkAndroid

22 Aug 2019 1:49pm GMT

Overpaying for renters or homeowners insurance? Check out Lemonade’s AI-powered insurance and save some cash

Insurance can be a huge pain to deal with, especially as a homeowner. There's a lot to worry about, and worst of all, it can be pretty expensive on top of everything else. Lemonade wants to help with that by taking a modern, significantly less expensive spin on your insurance, whether you're renting or a […]


Come comment on this article: Overpaying for renters or homeowners insurance? Check out Lemonade's AI-powered insurance and save some cash

Visit TalkAndroid

22 Aug 2019 1:30pm GMT

feedAndroid Community

Galaxy Note 10 launches in Korea, gets record 1.3M pre-orders

Things are looking up for Samsung with the release of its latest Galaxy device. At least in the early days in its native country. The Galaxy Note 10 has officially gone on sale in South Korea after getting a record number of 1.3 million pre-orders. It's the highest number that they have gotten in terms […]

22 Aug 2019 1:00pm GMT

feedTalkAndroid

(Update: Now available to Download) Pre-register for Microsoft’s Gears Pop! strategy game on the Play Store now

If you've ever wondered what a mash-up of Gears of War and Funko Pop figures would look like, wonder no more because Microsoft announced such a tie-up during E3, with the resulting game being called Gears Pop!. You can now pre-register for the Gears Pop! strategy game on Android and iOS. Update 22/08/2019: Gear's Pop! […]


Come comment on this article: (Update: Now available to Download) Pre-register for Microsoft's Gears Pop! strategy game on the Play Store now

Visit TalkAndroid

22 Aug 2019 12:14pm GMT

feedAndroid Community

Nokia 7.2 live image surface, shows a round Zeiss camera module

The Nokia 7 series first appeared in 2017, breaking cover with a Snapdragon 630 processor, 6GB or RAM, and a Bothies feature. A Plus variant was soon leaked before its MWC 2019 release as an Android One phone offering. The Nokia 7.1 variant was also released running Android One and with PureDisplay screen technology. It […]

22 Aug 2019 12:00pm GMT

HTC U12+ also set to receive Android 9 Pie in America

The HTC U12+ is one of the OEM's more popular premium flagship models that was introduced last year. The phone was highly anticipated especially after leaks and live photos surfaced online before the official launch. The device reached DxOMark with us saying the four cameras made a mark. However, a product teardown revealed that it's […]

22 Aug 2019 10:30am GMT

G Suite users now get auto-correct, typing suggestions in Gmail

While most of the regular Gmail users have been enjoying (or not) the autocorrect and suggestions as-you-type in their email app, G Suite users have yet to see that squiggly blue line appear as they're composing emails. But the good news (or bad news for those annoyed by this) is that the spelling and grammar […]

22 Aug 2019 9:30am GMT

Updated Casio Pro Tek smartwatch adds sensors, heart rate monitor

If you bought a Casio Pro Tek smartwatch a couple of years ago and you're kind of attached to how it looks and functions, you may want to upgrade to the new version. The Casio Pro Tek WSD-F21HR is still very much similar to its predecessor but it now comes with a slight upgrade hardware-wise. […]

22 Aug 2019 8:30am GMT

Samsung Galaxy Tab A (2017), Tab S3 ready for Android Pie update

The Samsung Galaxy Tab S3 may be considered a bit old but the tablet is getting a slice of Pie. An Android 9.0 update gives any device a refresh with its new features and enhancements. It may have been overshadowed by the Samsung Galaxy Tab S4 and Galaxy Tab S6 but together with the Galaxy […]

22 Aug 2019 7:30am GMT

Denuvo DRM solution coming to Android mobile games

Phones definitely need protection from different elements whether from actual and physical elements or from different malware that abound. When it comes to mobile games, broken or those laden with viruses are simply considered as malware. To make sure even mobile games installed on smartphones and tablets are safe, there is a DRM solution for […]

22 Aug 2019 5:40am GMT

Google Play Store rolls out a complete visual redesign

It's not very often that Google updates the actual Play Store but when it does, expect major changes and new features. Last week, the tech giant started letting app developers add tags for better discovery. It was after we learned that it's not suspending developers with old and unpublished apps. The past few weeks, Google […]

22 Aug 2019 4:47am GMT

feedTalkAndroid

LG ditches Google Assistant for Amazon Alexa in its new appliances at IFA 2019

LG's smartphones have typically utilized Google Assistant, with some of them even having a dedicated Google Assistant button. This has always been a pretty stark contrast to the rest of the Android ecosystem, with many manufacturers opting for all kinds of Amazon Alexa integration, and Samsung rolling their own with Bixby. But that tide might […]


Come comment on this article: LG ditches Google Assistant for Amazon Alexa in its new appliances at IFA 2019

Visit TalkAndroid

22 Aug 2019 3:34am GMT

feedAndroid Community

Facebook now lets you view (and delete) Off-Facebook Activity

If you've always wondered why ads from websites you've visited follow you on Facebook, that's because they have tools like Login with Facebook, like and comment, and pixels. But you don't really have something that would let you view and track all of that data that Facebook has been sharing with external websites. Well, now, […]

22 Aug 2019 1:30am GMT

21 Aug 2019

feedAndroid Community

Google Go now available for “regular” Android devices

If you have an Android device that's not so great when it comes to memory or storage space, Google's lightweight versions of their most popular apps are pretty handy to have. One of these apps is Google Go which is a lite version of the Google app. However, it was only previously available for Android […]

21 Aug 2019 11:00pm GMT

Messages 4.7 update now allows quick delete of several messages

Android Messages may be not as popular yet but once Google rolls it out to a wider audience, expect more people will love it. The feature has been around for years now and it's been integrated with many other Google services like Google Duo. Google has started to push RCS platform for carriers and businesses […]

21 Aug 2019 10:00pm GMT

Moto RAZR foldable phone will be more compact, more affordable

Motorola foldable phone has already been confirmed earlier this year. It could be the new MOTO RAZR with some of the specs listed. We've already seen the patent granted and several image renders. There was even the controversial fan video that Lenovo shared without permission. Back in April, the first foldable phone from Motorola was […]

21 Aug 2019 8:00pm GMT

feedTalkAndroid

Android Pie is finally rolling out to HTC U12+ users in the US

As most smartphone brands are working towards Android Q's official launch in the next month or so, beleaguered HTC is only just rolling out Android Pie 9 in the US to its most recent flagship, the U12+. Having launched back in May 2018, the U12+ has languished on Android 8 Oreo with HTC's reputation for […]


Come comment on this article: Android Pie is finally rolling out to HTC U12+ users in the US

Visit TalkAndroid

21 Aug 2019 6:27pm GMT

feedAndroid Community

OPPO Reno 2 surfaces on TENAA, official launch impending

The OPPO Reno 2 is coming and it seems the official launch is about to happen. The new phone has recently reached TENAA. This is the Chinese FCC which tells us a device is almost ready for announcement and market release. Just a few days ago, we said the phone could be out with a […]

21 Aug 2019 6:00pm GMT

feedTalkAndroid

[Deal] Save $70 on the Roborock E35 Robot Vacuum & Mop

When it comes to vacuuming the house, wouldn't you rather spend your time sitting on a sun lounger in the garden soaking up the rays while the robot vacuum cleans the floor for you? If so, you'll be glad to know that you can save $70 on the bestselling Roborock E35 Robot Vacuum & Mop […]


Come comment on this article: [Deal] Save $70 on the Roborock E35 Robot Vacuum & Mop

Visit TalkAndroid

21 Aug 2019 5:38pm GMT

feedAndroid Developers Blog

The Google Play store’s visual refresh

Boris Valusek, Design Lead, Google Play

The Google Play Store has over two billion monthly active users coming to find the right app, game, and other digital content. To improve the overall store experience, we're excited to roll out a complete visual redesign. Aligning with Material design language, we're introducing several user-facing updates to deliver a cleaner, more premium store that improves app discovery and accessibility for our diverse set of users.

Google Play store's visual refresh

To make browsing faster and easier, we've introduced a new navigation bar at the bottom of the Play Store on mobile devices and a new left navigation on tablets and Chrome OS. There are now two distinct destinations for games and apps, which helps us better serve users the right kind of content. Once users find the right app or game, the updated store listing page layout surfaces richer app information at the top of each page as well as a more prominent call-to-action button. This makes it easier for users to see the important details and make a decision to install your app. You'll also notice our new icon system with a uniform shape, helping content to stand out more over UI. If you haven't done so already, make sure to update your icon following the new icon specifications as soon as possible.

If you're looking for best practices to make a compelling store listing page, we have several resources to help. To ensure your page resonates well with Android users, use store listing experiments to test for the best app icon, images, video, and descriptions on Google Play. You can also tailor your marketing messages to specific user groups based on their country, install state or even pre-registration by creating custom store listings. For even more, try our free e-learning resource, Academy for App Success.

How useful did you find this blogpost?


21 Aug 2019 5:00pm GMT

feedTalkAndroid

Want a more lightweight Google experience? Google Go comes to all Android smartphones

Google has a huge suite of "lite" apps that use their Go branding. These apps deliver familiar Google experiences, but in a much smaller, faster package. The latest app in that family, Google Go, is finally rolling out to everyone, which will give users an option to stick with Google with less of a performance […]


Come comment on this article: Want a more lightweight Google experience? Google Go comes to all Android smartphones

Visit TalkAndroid

21 Aug 2019 4:30pm GMT

feedAndroid Community

Samsung DeX with Mac, Windows for Galaxy Note 10 now working

One of the more interesting advancements the new Galaxy Note 10 series offers is Samsung DeX. The feature has been around in several flagship phones but not many people take advantage of it. With the new Note 10, using it is easier now because you only need a USB to connect. No need for a […]

21 Aug 2019 4:00pm GMT

feedTalkAndroid

Gaming is about to get much better on Android; Google adds Xbox Elite Controller remapping to AOSP

If you frequently play games on your smartphone, you've probably looked into pairing up a controller to your phone. You might have even done it already, especially if you already own an Xbox One or PlayStation 4. But what you might have found out is that controller mapping on Android isn't as fluid as it […]


Come comment on this article: Gaming is about to get much better on Android; Google adds Xbox Elite Controller remapping to AOSP

Visit TalkAndroid

21 Aug 2019 2:48pm GMT

[TA Deals] Tackle a .NET & C# certification with this discounted training bundle (98% off)

If you're looking for new programming languages to build out your skillset, you can't go wrong with C#. Not only is it a flexible and powerful coding language on its own, but it's also the kind of language that will help you learn other things because it has so many derivatives and similarities to other […]


Come comment on this article: [TA Deals] Tackle a .NET & C# certification with this discounted training bundle (98% off)

Visit TalkAndroid

21 Aug 2019 2:35pm GMT

Oppo Reno 2 mid-range specs leak following official teasers

Only a few months after their debut zoom-focused Reno smartphone, Oppo has already been teasing the sequel's imminent release and now its mid-range specs have leaked. Oppo threw their hat in the currently trending crazy-zoom game back in April with their debut 'Reno' phone which had the basic mid-range model with a mid-range chip and […]


Come comment on this article: Oppo Reno 2 mid-range specs leak following official teasers

Visit TalkAndroid

21 Aug 2019 2:10pm GMT

20 Aug 2019

feedTalkAndroid

Samsung showcases the premium features of the Galaxy Note 10’s display in a new infographic

Samsung is renowned for the quality of its AMOLED displays and the Infinity-O panels found on the Galaxy S10/S10+ and Galaxy Note 10/10+ are prime examples of how the Korean company is the leader in display technology. As the newest members of the Note series, the Galaxy Note 10 and Note 10+ feature Dynamic AMOLED […]


Come comment on this article: Samsung showcases the premium features of the Galaxy Note 10's display in a new infographic

Visit TalkAndroid

20 Aug 2019 10:00pm GMT

Leaked roadmap points to multiple TCL-branded smartphones launching in the next 12 months

TCL might not be a brand that you are totally familiar with but it's America's most popular TV manufacturer, as well as being the licensee of some house-hold smartphone brands such as BlackBerry and Alcatel. Thanks to a leak by Evan Blass detailing the company's roadmap, it seems that the brand is prepping to launch […]


Come comment on this article: Leaked roadmap points to multiple TCL-branded smartphones launching in the next 12 months

Visit TalkAndroid

20 Aug 2019 9:00pm GMT

feedAndroid Developers Blog

Android Studio 3.5: Project Marble goes into stable


Posted by Jamal Eason, Product Manager, Android
Android Studio logo
Have you ever wished that Android Studio was faster, more performant, and more memory efficient? If so, then download Android Studio 3.5 today. This stable version of Android Studio is a different kind of release where the Android Studio team took a step back from large feature work for eight months and instead focused on product quality to further accelerate your day-to-day app development. We called this initiative Project Marble, and it focused on making the fundamental features and flows of Android Studio & Emulator rock-solid by looking at three core areas: system health, feature polish, and bugs. Working on Project Marble was in direct response to feedback from you and we continue to welcome any further feedback you have.
To improve system health in Android Studio, we first created a new set of infrastructure and internal dashboards to better detect performance problems. We did this to establish a safety net to catch issues that are typically difficult to catch with regular unit testing. Then, the team addressed a range of issues from fixing over 600 bugs, 50 memory leaks, 20 IDE hangs, and improving XML & Kotlin typing latency. Additionally, for the Android Emulator, we decreased the CPU and memory impact on your development machine. Project Mable was a focused period to work on the IDE and Android Emulator system health but it also uncovered a set of quality areas we will continue to work on going forward.
On top of memory and performance, we spent time polishing and fixing core user facing feature areas. For example, we took a look at the app deployment flow to a device, and completely re-architectured and replaced Instant Run with Apply Changes so that it's more reliable and trusted. With Apply Changes, we no longer modify an APK during your build but instead, we use runtime instrumentation to redefine classes on the fly. If you want to quickly edit code and see code changes, you should try Android Studio 3.5 today.
Lastly, over the course of Project Marble we fixed bugs which landed in Android Studio in 3.5. We are thankful to those who filed bug reports and engaged with us on social media. We are especially thankful for the over 40 external contributors in the Android community that diligently worked with us in filing and resolving critical quality issues in Android Studio 3.5. Project Marble is not the end of quality work for the Android Studio team, but this latest stable release is a major milestone of our on-going quality investment into the IDE. With the quality work and new infrastructure put in place during Project Marble, we hope that you are even more productive in developing Android apps when you download and use Android Studio 3.5.
There are many quality changes we made to Android Studio 3.5. To see the full list of changes, see the Android Studio 3.5 beta release blog and release notes. But you can dive into some of the highlights of the changes below:

System Health


System health improvements during Project Marble was a combination of memory performance, typing & user interfaces freezes, build speed, CPU usage, and I/O performance. For each of these areas we created new ways to detect issues during development and a better process to analyze your feedback both from opt-in analytics and bugs that you file.
Our system health work has many under the hood improvements but a few notable changes include:
Auto-recommend Memory Settings
With Android Studio 3.5, the IDE will recognize when an app project needs more RAM on a machine with higher RAM capacity and will notify you to increase the memory heap size or you can adjust the settings yourself under Appearance & Behavior → Memory Settings.
Memory Settings
Memory Settings
User Interface Freezes
During the Project Marble development timeframe, we found in our opt-in product analytics that XML code editing was notably slower in the IDE. With this data point, we optimized XML typing, and have measurably better performance in Android Studio 3.5. You can see below that editing data binding expressions in XML is faster due to typing latency improvements.
Code Editing Before
Code Editing Before - Android Studio 3.4

Code Editing After - Android Studio 3.5
Build Speed
For Android Studio 3.5 we made many speed improvements but a significant change is the addition of incremental build support to the top annotation processors including Glide, AndroidX data binding, Dagger, Realm, and Kotlin (KAPT). Incremental support can make a notable impact on build speed. Learn more here.
Disk I/O File Access Speed
For users on Microsoft® Windows®, we found that disk I/O access times were notable higher on average than other platforms. Digging into the data, we found the default configuration of anti-virus scanners did not optimally exclude build output folders. In Android Studio 3.5, we detect this situation and help guide you through the optimal setup.
System Health Notification
System Health Notification - Anti-virus Check

Feature Polish


In addition to improving system health we relooked at a few critical users flows to address bugs and user friction. The areas we looked at ranged from data binding, layout editor, ChromeOS support to project upgrades. One notable area of improvement to highlight is the app deployment flow:
Apply Changes
During the Project Marble time period, we removed Instant Run and re-architectured and implemented from the ground-up a more practical approach in Android Studio 3.5 called Apply Changes. Apply Changes uses platform-specific APIs from Android Oreo and higher to ensure reliable and consistent behavior; unlike Instant Run, Apply Changes does not modify your APK. To support the changes, we re-architected the entire deployment pipeline to improve deployment speed, and also tweaked the run and deployment toolbar buttons for a more streamlined experience.
Apply Changes Buttons
Apply Changes Buttons
App Deployment User Flow
App Deployment User Flow
To recap, Android Studio 3.5 has hundreds of bug fixes and notable changes in these core areas:
System Health
  • Memory Settings
  • Memory Usage Report
  • Reduce Exceptions
  • User Interface Freezes
  • Build Speed
  • IDE Speed
  • Lint Code Analysis
  • I/O File Access
  • Emulator CPU Usage
Feature Polish
  • Apply Changes
  • Gradle Sync
  • Project Upgrades
  • Layout Editor
  • Data Binding
  • App Deployment
  • C++ Improvements
  • Intellij 2019.1 Platform Update
  • Conditional Delivery for Dynamic Feature Support
  • Emulator Foldables & Google Pixel Device Support
  • Chrome OS Support
Check our the Android Studio release notes page for more details and read about deep dives into several areas of Project Marble in the following Medium blog posts & Google I/O talk:

Opt-In & Feedback


The specific areas and the approach we took to optimize Android Studio for Project Marble were all based on your feedback and metrics data. The aggregate metrics you can opt-in to inside of Android Studio allow us to figure out if there are broader problems in the product for all users, and the data also allows the team to prioritize feature work appropriately. There are are a couple pathways to help us build better insights. At a baseline, you can opt-in to metrics, by going to Preferences /Settings → Appearance & Behavior → Data Sharing.
IDE Data Sharing
IDE Data Sharing
Additionally, throughout the year, you might see user sentiment emojis in the bottom corner of the IDE. Those icons are a lightweight way to inform the Android Studio team on how things are going and to give us in-context feedback, and the fastest way to log a bug and send to the team.
IDE User Feedback
IDE User Feedback

Getting Started


Download
Download Android Studio 3.5 from the download page. If you are using a previous release of Android Studio, you can simply update to the latest version of Android Studio.
To use the mentioned Android Emulator features make sure you are running at least Android Emulator v29.1.9 downloaded via the Android Studio SDK Manager.
As mentioned above, we appreciate any feedback on things you like, and issues or features you would like to see. If you find a bug or issue, feel free to file an issue. Follow us -- the Android Studio development team ‐ on Twitter and on Medium.

20 Aug 2019 5:00pm GMT

15 Aug 2019

feedAndroid Developers Blog

Improving Accessibility in the Android Ecosystem

Posted by Ian Stoba, Program Manager, Accessibility Engineering

With billions of Android devices in use around the world and millions of apps available on the Play Store, it might seem difficult to drive change across the entire ecosystem, but the Accessibility Developer Infrastructure team is doing just that.

Every time a developer uploads an APK or app bundle to the open or closed tracks, Play tests this upload on various device models running different versions of Android and generates a pre-launch report to inform the developer of issues.

One year ago, the team added accessibility suggestions to the report based on industry best practices and Google's own experience. These tests check for common issues that can make an app harder to use by people with disabilities. For example, they check that buttons are large enough to be comfortable for people to press, and that text has enough contrast with the background to be easier to read.

Since launching in July 2018, more than 3.8 million apps have been tested and over 171 million suggestions have been made to improve accessibility. Along with each suggestion, the developer gets detailed information about how to implement it. Every developer, from a one-person startup to a large enterprise, can benefit from the accessibility suggestions in the pre-launch report.

We are already seeing the real-world impact of these efforts. This year at Google I/O, the number of developers signing up for in-person accessibility consultations was four times the number from 2018. Googlers staffing these sessions reported that the developers had specific questions that were often based on the suggestions from the pre-launch report. The focused questions allowed the Googlers to give more actionable recommendations. These developers found that improving accessibility isn't just the right thing to do, it also makes good business sense by increasing the potential market for their apps.

Accessibility tests in the pre-launch report are just one way Google is raising awareness about accessibility in the global developer community. We partnered with Udacity to create a free online course about web accessibility, released our Accessibility Scanner for Android on the Play Store, and published iOS Accessibility Scanner on GitHub, allowing iOS developers to easily instrument apps to accessibility tests. Together, these efforts support Google's mission to organize the world's information and make it universally accessible and useful.

Learn more about developing with accessibility in mind by visiting the Android Developer Guidelines and the Google Developer Documentation Style Guide.

15 Aug 2019 11:00pm GMT

14 Aug 2019

feedAndroid Developers Blog

Google releases source code for Google I/O 2019 for Android

Posted by Takeshi Hagikura, Developer Programs Engineer

Today we're releasing the source code for the official Google I/O 2019 Android app.

This year's app substantially modified existing functionality and added several new features. In this post, we'll highlight several notable changes.

Android Q out of the box

Android Q introduced an option for fully gestural navigation, allowing the user to navigate back and to the home screen using only gestures. To support gesture navigation, app developers need to do two things:

  1. Extend app content to draw edge-to-edge
  2. Handle any conflicting app gestures

The Google I/O 2019 app was one of the first apps to support fully the gestural navigation. For more details, check out this series of blog posts about gesture navigation and the commit in the Google I/O app repository that extended the content to draw edge-to-edge.

Gesture navigation navigating back and to the home screen

Another new feature that was introduced with Android Q was the new system Dark theme that applies to both the Android system UI and apps running on Android devices. Dark theme brings many benefits to developers, including being able to reduce power usage and improving visibility for users with low vision and those who are sensitive to bright light.

To support the dark theme, you must set the app's theme to inherit from a dark theme.

<style name="AppTheme" parent="Theme.AppCompat.DayNight">
OR
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">


You also need to avoid hard-coded colors or icons. You should use theme attributes (such as ?android:attr/textColorPrimary) or night-qualified resources (such as colors defined both in the res/values/colors.xml and res/values-night/colors.xml) instead. Check out the Google I/O talk about Dark Theme & Gesture Navigation for more details or the series of commits (1, 2, 3) in the Google I/O 2019 app repository for how we achieved implementing the dark theme in a real app.

Schedule UI in dark theme

Improved schedule screen

In 2018, we adopted a tabbed interface for the schedule UI with horizontal swiping, each tab represented a conference day. In 2019, we changed the UI to address some usability and performance problems. For example, the views in the all tabs were rendered at the same time when the schedule UI became visible. That caused a noticeable UI slowdown especially on a low-end device.

The new schedule UI is a single stream, allowing the app to render only visible content and users to easily jump to another conference day by choosing a day at the top of the UI. Check out the series of commits (1, 2) for how we revamped the schedule UI.

This year's schedule UI jumping to another conference day

Navigation component

We introduced Navigation component to simplify this year's app into a Single Activity app and observed the following benefits:

Check out the getting started guide for how you can start introducing the Navigation component in your app and the series of commits (1, 2, 3, 4) in the Google I/O 2019 app repository for the usage in a real app.

All transitions in the navigation editor

Full Text Search with Room

For this year's app we added a search feature for users to quickly find sessions, speakers, and codelabs. To accomplish this, we used the Full Text Search feature of the Room Jetpack component. Whenever the conference data is fetched from the server, we update the session, speaker, and codelab data in the Room tables, which have corresponding FTS mapping tables. When a user starts typing in the search box, the search term is used to query the session title and description, speaker names, and codelab title. The search results are shown almost instantly, which allows the search results to be updated with each character typed in the search field. The user can then tap on a search result to navigate to see the details on the session, speaker, or codelab. Check out the series of commits (1, 2, 3, 4) for how we achieved the Full Text Search feature.

Searching for a session and a speaker

Lots of improvements

These were the biggest changes we made to the app, but we improved a lot of little things as well. We added the new Home UI, allowing the app to tell the user time relevant information during the conference and the Codelab UI, which gave users more information about codelabs at I/O and how to participate in them.

Home UI and Codelabs UI

We also introduced Firebase Remote Config to toggle the visibility of each feature by updating the boolean values in the Remote Config without updating the app and removed the hard-coded values that were used for representing start and end time of each event in the Agenda UI.

Go explore the code

If you're interested go checkout the code and let us know what you think. If you have any questions or issues, please let us know via the issue tracker on GitHub.


14 Aug 2019 5:52pm GMT

13 Aug 2019

feedAndroid Developers Blog

Nexon increases day 60 retention and monetization with pre-registration rewards

Posted by Kacey Fahey, Google Play Developer Marketing

Nexon Korea Company has published several games across PC, mobile, and console. With the launch of their mobile game FAITH, a MMORPG released exclusively in Japan, they wanted to promote the game before launch and find a way to capture early consumer demand that would help boost early installs at launch.

What they did

Nexon ran a pre-registration campaign on Google Play with a multi-channel marketing campaign driving players to pre-register and receive an exclusive pre-registration reward. Their campaign used consistent creative assets throughout TV commercials, YouTube influencer campaigns, social media, performance marketing campaigns, and more. Offering a pre-registration reward provided an incentive and benefit for players who pre-registered on Google Play during the month-long campaign leading up to launch.

Banner for mobile game FAITH, a MMORPG released exclusively in Japan

"It was very easy to run, since the steps to activate the campaign were very clear and simple. All we needed to do was prepare the store assets and APK, then set them up in the Google Play Console," said Hyomin Kim, Head of Platform Partnerships at Nexon Korea Corporation. Their exclusive pre-registration reward of 300 diamonds (in-game currency) was set up as a unique managed product as part of the campaign. At launch, Google Play provides the reward to all players who pre-registered, allowing Nexon to consume and grant the reward to players in-game using the Google Play Billing API. Not only did this create additional value for users, but it allowed Nexon to identify those who pre-registered in-game so they could measure the cohort's performance after launch. Once the game became available on launch day, everyone who pre-registered on Google Play received a notification to install.

Results

Nexon reported they had historically seen around 50% of Google Play pre-registrations convert to installs. By offering a pre-registration reward for FAITH, they increased their conversion rate by 20%. And not only that, the campaign drove other strong performance metrics with players who pre-registered for FAITH on Google Play having almost 50% higher day 60 retention than those who did not pre-register. This audience has also shown stronger monetization behavior, with over 70% higher ARPDAU than non-pre-registrants.

"Google Play pre-registration is now a 'must-do' strategy when Nexon launches games. From our previous experience, Google Play pre-registration is one of the most effective pre-registration platforms amongst all the channels we utilize, especially for organic impressions and installation conversion," said Kim.

Get started

All app and game developers can run pre-registration campaigns and offer a pre-registration reward. Get started today!

13 Aug 2019 6:00pm GMT

08 Aug 2019

feedAndroid Developers Blog

Gesture Navigation: A Backstory

Posted by Allen Huang and Rohan Shah, Product Managers on Android UI

mobile ui

One of the biggest changes in Android Q is the introduction of a new gesture navigation. Just to recap - with the new system navigation mode - users can navigate back (left/right edge swipe), to the home screen (swipe up from the bottom), and trigger the device assistant (swipe in from the bottom corners) with gestures rather than buttons.

By moving to a gesture model for system navigation, we can provide more of the screen to apps to enable a more immersive experience.

We wanted to give folks an inside look at how we've approached this challenge, the rationale, and some of the trade-offs as well. There is some nerding out on design around gestures ahead, but hopefully it provides some insight into our process and how we balance the developer and OEM ecosystem in service of users. If you're looking for more detail on how to handle these changes as an app developer, check out Chris's "Going edge-to-edge" article series.

Why gestures?

One of the amazing things about Android is the opportunity for app developers and Android partners to try new, innovative approaches on the phone.

In the last 3 years, we've seen gesture navigation patterns proliferate on handheld devices (though gestures have been around as early as 2009!).

This trend was led by innovative Android partners and Android apps trying some very cool ideas (for example: Fluid NG, XDA).

When we started researching this more, we honed in on the user benefits:

  1. Gestures can be a faster, more natural and ergonomic way to navigate your phone
  2. Gestures are more intentional than software buttons that you might trigger just by grabbing your phone
  3. Gestures enable a more immersive experience for apps by minimizing how much the system draws over app content, i.e. HOME/BACK buttons and the bar they sit on - especially as hardware trends towards bigger screens and smaller bezels

It wasn't all roses though - we also saw issues with many of the gesture modes:

  1. Gestures don't work for every user
  2. Gestures are harder to learn and can take some adjustment
  3. Gestures can interfere with an app's navigation pattern

But most of all, we realized that there was a larger issue of fragmentation when different Android phones had different gestures, especially for Android developers.

Over the last year, we worked with partners like Samsung, Xiaomi, HMD Global, OPPO, OnePlus, LG, Motorola, and many others to standardize gesture navigation going forward. To ensure a consistent user and developer experience, the Android Q gestures will be the default gesture navigation for new Q+ devices.

Understanding that these gestures don't work for every user, especially those with more limited dexterity and mobility, three-button navigation will continue to be an option on every Android device.

So why these gestures?

We started with research to understand how users held their phones, what typical reach looked like, and what parts of the phone users used the most. From there, we built many prototypes that we tested across axes like desirability, speed-of-use, ergonomics, and more. And we put our ultimate design through a range of studies - how quickly users learned the system, how quickly users got used to the system, how users felt about it.

A unique element of Android navigation since the very beginning is the Back button. It is appreciated by many users that find Android easier to navigate and learn (despite many debates on what the "correct" behavior is) -- and it's used a lot! In fact, 50% more than even Home. So one of our design goals was to make sure the back gesture was ergonomic, dependable, and intuitive -- and we prioritized this goal above other less frequent navigation such as drawers and recents.

Looking at the reachability charts below, we designed our two core gestures (Back and Home) to coincide with the most reachable/comfortable areas and movement for thumbs.

Phone screen heatmaps showing where users can comfortably do gestures, holding the phone in only one hand

Phone screen heatmaps showing where users can comfortably do gestures, holding the phone in only one hand

As mentioned, we built prototypes of many different gesture models, comparing user ratings and timed user tasks on what ultimately became the Q model to several other navigation paradigms. Here's a few graphs showing the results of our testing:

Comparison of user ratings for ergonomics and one-handed use across different navigation modes (higher is better)

Comparison of user ratings for ergonomics and one-handed use across different navigation modes (higher is better)


Comparison of average time required to complete Home/Back tasks across various navigation modes (lower is better)

Comparison of average time required to complete Home/Back tasks across various navigation modes (lower is better)


Comparison of average time required to complete Overview/Recents-based tasks across various navigation modes (lower is better)

Comparison of average time required to complete Overview/Recents-based tasks across various navigation modes (lower is better)


Users, on average, performed tasks involving Home and Back more quickly than most other models - even faster than they did with buttons. The model did, however, come at the cost of being able to quickly access Overview/Recent apps, which users go to less than half as often as the Home screen.

From a more qualitative perspective, users viewed the Q model as more one-handed and reachable, although buttons were still viewed as more ergonomic for more users.

App Drawers and other App Swipes

Although we arrived at the side swipe as the gesture for back that best balanced many tradeoffs, it is important to note that there were hard decisions, particularly in how that gesture impacted apps.

For example, we found that ~3-7% of users (depending on the Google app) swipe to open the App Navigation Drawer - the rest of our users push the hamburger menu to invoke the drawer. This drawer swipe gesture is now overloaded with back and some users will need to adapt to using the hamburger menu. This was a tough choice but given the prolific use of back we optimized for what worked best there.

Because it's never a goal to change out behavior on users, we tried several ways to enable users to distinguish the drawer gesture from the Back gesture. However, all these paths led to users pulling in the drawer when they were trying to go Back and having less confidence that Back would work.

Beyond drawers, gestures are a big change for people and it took on average 1-3 days to adapt - in particular, users struggled with patterns like swiping right or left on a carousel and triggering Back.

In qualitative studies, we found that after an initial break-in period of 1-3 days, users became fluent and could consistently distinguish between these two gestures. The majority of users did not want to switch back to 3 button nav (even though that remains an option).

Additional research showed that there is a clear adjustment phase for users to get used to a new system navigation (across many different navigations). In our Q model, we found that usage of Back goes down for the first 1-3 days. After that period, the average # of Back presses/day ends up being the same as 3-button and our P navigation.

So What Does This Mean for Developers?

With gestural navigation, we are aiming to move forward and standardize the user experience on Android. The model we landed on is the optimal one for most users, but it also means that some of the gestures conflict with existing app gestures, necessitating developer adjustments to how users interact with your apps. We take our responsibility to Android developers seriously and want to help you in this process.

There are three key steps to support gesture navigation:

  1. Go edge-to-edge to enable your app to draw across the entire screen
  2. Handle any visual overlaps with the system user interface (i.e. navigation bar)
  3. Resolve any gesture conflicts with the system gestures

We've just published the first article in our "Going edge-to-edge" series on Medium, detailing those steps in turn. The final article in the series will cover some of the common scenarios we've seen, and how you can best support them in your apps.

Thank you all for the feedback -- all of your comments and interactions have helped us improve the gesture navigation experience in Android Q and, more broadly, help make Android better each day.

08 Aug 2019 8:20pm GMT

07 Aug 2019

feedAndroid Developers Blog

Final Beta update, official Android Q coming soon!

Posted by Dave Burke, VP of Engineering

AndroidQ logo

We're just a few weeks away from the official release of Android Q! As we put the final polish on the new platform, today we're rolling out Beta 6, the last Beta update. Now is the time to make sure your apps are ready, before we bring the official release to consumers. Take this opportunity to finish up your testing and publish your app updates soon to give users a smooth transition to Android Q.

You can get Beta 6 today on Pixel devices by enrolling here. If you're already enrolled and received Beta 5, you'll automatically get Beta 6 soon. Partners participating in the Android Q Beta program will also be updating their devices over the coming weeks -- visit their sites to learn more. To get started with Android Q, visit developer.android.com/preview.

Watch for more information on the official Android Q release coming soon!

What's in Beta 6?

Today's Beta 6 update includes the latest Android Q system images for Pixel and Android Emulator, the final API 29 SDK, and updated build tools for Android Studio. Beta 6 includes all of the features, system behaviors, and developer APIs that you'll find in the final platform, so it gives you everything you need to get your apps ready. For users, Beta 6 includes many new fixes and optimizations -- take a look at the release notes for details.

We've made further refinements to Gesture Navigation in Beta 6 based on user feedback. First, to ensure reliable and consistent operation, there's a 200dp vertical app exclusion limit for the Back gesture. Second, we've added a sensitivity preference setting for the Back gesture. Watch for more details coming soon in our blog post series on optimizing for gesture navigation.

Get your apps ready for Android Q!

With the consumer release coming soon, we're asking all Android developers to update your current apps for compatibility as soon as possible.

Here's how to do it:

We realize that supporting these changes is an investment for you too, so thanks to all of you who have prioritized the work to get your apps ready for Android Q!

Enhance your app with Android Q features and APIs

Next, when you're ready, dive into Android Q and learn about the new features and APIs that you can use. Here are some of the top features to get started with.

We recommend these for every app:

We recommend these if relevant for your app:

These are just a few of the many new features and APIs in Android Q -- to see them all, visit the Android Q Beta site for developers.

Publish your app updates to Google Play

As soon as you're ready, publish your APK updates to Google Play that are compiled against, or optionally targeting, API 29. To make sure that your updated app runs well on Android Q as well as older versions, try using Google Play testing tracks. With tracks you can safely get early feedback from a small group of users and then do a staged rollout to production.

How do I get Beta 6?

It's easy! Just enroll any supported Pixel device here to get the update over-the-air. If you're already enrolled, you'll receive the update soon and no action is needed on your part. Downloadable system images are also available here. Partners who are participating in the Android Q Beta program will be updating their devices over the coming weeks. See android.com/beta for details.

To get started developing, download the official API 29 SDK and tools into the stable release of Android Studio 3.4, or for the latest Android Q support update to Android Studio 3.5 Beta. Then follow these instructions to configure your environment, and see the release notes for known issues.

Please continue to share your feedback and requests in our issue tracker. You can use our hotlists for filing platform issues (including privacy and behavior changes), app compatibility issues, and third-party SDK issues.

A big thank you to our developer community for your participation in our recent Reddit AMA on r/androiddev! It's always great to hear what's important to you and we hope we were able to help!

07 Aug 2019 5:06pm GMT

31 Jul 2019

feedAndroid Developers Blog

Make stronger decisions with new Google Play Console data

Posted by Tom Grinsted, Product Manager, Google Play

At this year's Google I/O, we announced a slate of new features to help you take your business further with Google Play. Launching today, these changes include several improvements designed to help you make better decisions about your business by providing clearer, more actionable data.

We know the right data is critical to help you improve your app performance and grow your business. That's why we're excited to share a major update that enables you to better measure and analyse your core statistics - the most fundamental install and uninstall metrics by user and device. We've also enhanced the Statistics page on the Play Console to show change over time, enable more granular configurations, and, coming soon, exclusive benchmarks for core stats!

Statistics page on the Play Console

More granular configurations are now available on the Statistics page to help you better understand your acquisition and churn.

More accurate and more expansive than before, the new metrics will help you better understand your acquisition and churn. For the first time, we are including data on returning users and devices - something that we understand is critical to many developers' growth strategies.

We're also including new install methods (such as pre-installs and peer-to-peer sharing) and the ability to aggregate and dedupe over periods that suit your business needs. With these new updates, you can perform analyses that weren't possible before, such as how many people re-installed your app last month.

Here's what else is new:

As a result of these updates, you will notice a few changes to your metrics. Old metrics names will be deprecated, but you can configure new metrics that map to the old ones with this cheat sheet. And don't forget to use the 'save report' feature on the stats page so you can easily return to any configurations you find particularly helpful!

Save report feature on the stats page

Don't forget to use the 'save this report' feature on the stats page to easily return to any configurations you find particularly helpful.

Other metrics like active user and active device will see a step-change as the new definitions are more expansive and include previously under-counted data.

Some new metrics map onto older ones. Where this happens, all historic data will be automatically included. But in other cases new metrics will only be generated from launch day. For unique devices or users, weekly metrics will start to appear two weeks after launch, monthly metrics once there's a single full month's data, and quarterly metrics once there's a full quarter's data.

We know it's a lot to take in at once, so make sure to bookmark the cheat sheet for helpful tips as you navigate the transition and explore your new metrics. Additionally, our Decision-Making with the Google Play Console session from Google I/O and our Play Academy training are other great resources to help you get up to speed.

Check out these updates in the Google Play Console today - we hope you find them useful. Your comments help to shape the future of Google Play, so please continue to let us know what you think.

How useful did you find this blog post?


31 Jul 2019 11:00am GMT

19 Jul 2019

feedAndroid Developers Blog

What’s new with Fast Pair

Posted by Catherina Xu (Product Manager)

Last November, we released Fast Pair with the Jaybird Tarah Bluetooth headphones. Since then, we've engaged with dozens of OEMs, ODMs, and silicon partners to bring Fast Pair to even more devices. Last month, we held a talk at I/O announcing 10+ certified devices, support for Qualcomm's Smart Headset Development Kit, and upcoming experiences for Fast Pair devices.

The Fast Pair team presenting at I/O 2019.

The Fast Pair team presenting at I/O 2019.

Upcoming experiences

Fast Pair makes pairing seamless across Android phones - this year, we are introducing additional features to improve Bluetooth device management.

 Detailed battery level notifications surfaced during “case open” for TWS headphones.

Detailed battery level notifications surfaced during "case open" for TWS headphones.

• Find My Device. Fast Pair devices will soon be surfaced in the Find My Device app and website, allowing users to easily track down lost devices. Headset owners can view the location and time of last use, as well as unpair or ring the buds to locate when they are in range.

Connected Device Details. In Android Q, Fast Pair devices will have an enhanced Bluetooth device details page to centralize management and key settings. This includes links to Find My Device, Assistant settings (if available), and additional OEM-specified settings that will link to the OEM's companion app.

The updated Device details screen in Q allows easy access to key settings and the headphone’s companion app.

The updated Device details screen in Q allows easy access to key settings and the headphone's companion app.

Compatible Devices

Below is a list of devices that were showcased during our I/O talk:

Interested in Fast Pair?

If you are interested in creating Fast Pair compatible Bluetooth devices, please take a look at:

Once you have selected devices to integrate, head to our Nearby Devices console to register your product. Reach out to us at fast-pair-integrations@google.com if you have any questions.

19 Jul 2019 7:57pm GMT

18 Jul 2019

feedAndroid Developers Blog

Kotlin named Breakout Project of the Year at OSCON

Posted by Wojtek Kaliciński, Developer Advocate, Android

Stephanie on Stage with Kotlin on screen

Stephanie Saad Cuthbertson announces support for Kotlin during the Developer Keynote at I/O 2017.

Today at OSCON (the O'Reilly Open Source Software Conference), Kotlin was awarded the Open Source Award for Breakout Project of the Year.

There is no doubt to us why Kotlin received this award: it's a fast moving (but thoughtfully developed) programming language that lets you write better code, faster. It's great to see Kotlin continue to receive the sort of recognition as Breakout Project of the Year, building on other awards like #1 fastest growing language on Github.

We're big fans of Kotlin, and we've heard that you are too - feedback from you is in part why we announced support for the language over two years ago. This meant bundling the Kotlin plugin in Android Studio, along with promising to support Kotlin-built apps going forward.

But there was a long way to go for many teams at Google to provide a first class experience with Kotlin in the Android ecosystem, and to convince developers that Kotlin on Android is not just a fad, but is here to stay.

If you haven't tried Kotlin yet, now is a great time to start! In fact, in the past two years, we've been adding a number of new features and upgrades to the Kotlin for Android experience, including:

Kotlin code snippet

Kotlin view of the AndroidX library

The road to fully supporting Kotlin on Android was not always easy, but it was truly rewarding seeing Kotlin adoption among professional Android developers rise from a handful of early adopters to around 50% since the original announcement!

We were confident when we announced earlier this year at Google I/O 2019 that Android is going increasingly Kotlin-first, opening up the possibility for APIs built specifically around Kotlin and for Kotlin users, starting with the new, declarative UI toolkit - Jetpack Compose (still in early development).

We want to congratulate JetBrains, our partners through the Kotlin Foundation and creators of Kotlin, on receiving the OSCON Open Source Award today. It shows how disruptive and transformative Kotlin has been, and not just for the Android developer community, but beyond.

We know one thing: on Android, Kotlin is here to stay.

18 Jul 2019 6:09pm GMT

16 Jul 2019

feedAndroid Developers Blog

Android Dev Summit 2019 Registration is Open

Posted by Sean McQuillan, Developer Advocate, Android

Registration now open! #AndroidDevSummit. Oct 23-24 in Sunnyvale, CA

Registration is now open for Android Dev Summit 2019!

Learn, share, and connect at #AndroidDevSummit 2019. It's a great place to learn new Android development skills, share feedback and ideas with the Android engineering team, and connect with Android developers from around the globe.

Join us for the two day conference on October 23-24 hosted at the Google Event Center (MP7) in Sunnyvale, CA. We'll share two days of deep technical talks covering topics such as Jetpack, Android Studio, Android Q, Kotlin, and more. You will learn about the latest innovations straight from the Android engineering team, discover best practices to help you build even better apps, and accelerate your teams' productivity on Android.

The Android engineering team will be there in person to answer your questions, hear your ideas and feedback (we love that!), and discuss the direction of Android development. And you will be joined by Android developers from around the globe ⁠- it's a great place to connect with your community.

Conference details

When: October 23-24

Where: Google Event Center (MP7)

Unable to attend?

Wherever you are, you can still watch the talks and engage with the community. You can tune in from anywhere to watch all of the talks online by joining our livestream. Sign up here to stay updated on event announcements. All of the talks will also be posted on YouTube soon after the event, so you can always catch up with the recordings on your own schedule.

The event schedule has not yet been posted, but we encourage you to check out last year's sessions to learn more about the great content and opportunities Android Dev Summit has to offer.

Register now

Attendance is free and by invitation only ⁠- register now to become eligible for an invitation. Selected attendees will receive their tickets after registration closes on August 15th at 5:00pm PDT. #AndroidDevSummit will fill up fast, so be sure to register today.

16 Jul 2019 4:00pm GMT

11 Jul 2019

feedAndroid Developers Blog

What’s new for text in Android Q

Posted by Florina Muntenescu, Android Developer Advocate

Displaying text is an important task in most apps, so in Android Q we're continuing to introduce new features to support your needs and improve performance. We disabled hyphenation by default, enabled creating a typeface using multiple fonts or font families, exposed the list of fonts installed on the device, and improved some of the most-used text styling APIs.

Hyphenation is off by default in Android Q and AppCompat v1.1.0

Our performance tests showed that when hyphenation is enabled, up to 70% of the time spent on measuring text is on hyphenation.

pie chart showing CPU of time spent making StaticLayout: Hyphenation takes up to 70% of the time spent measuring text, 30% Other text

Hyphenation takes up to 70% of the time spent measuring text

Given that hyphenation often isn't needed for all TextViews in an app, and because of the impact on performance, we decided to turn hyphenation off by default in Android Q and AppCompat v1.1.0. If you want to use hyphenation, you need to manually turn it on in your app by setting the hyphenation frequency to normal. You can set this in multiple ways:

As a TextAppearance attribute in styles.xml:

<style name="MyTextAppearance" parent="TextAppearance.AppCompat">
    <item name="android:hyphenationFrequency">normal</item>
</style>

As a TextView attribute:

<TextView android:hyphenationFrequency="normal" />

Directly in code:

textView.hyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NORMAL

Find out more about how hyphenation works from this talk at Android Dev Summit 2018.

Use multiple custom fonts in the same TextView

Consider a button which mixes a custom font (Lato in this example) with an icon font:

Secure Checkout Button with lock icon, icon and latin fonts

Button with icon and Latin fonts

The Button class accepts only a single instance of a typeface to be set on the text. Pre-Android Q, you can create a Typeface using a single font family. Android Q enables the creation of a typeface from multiple font families with a new API, Typeface.CustomFallbackBuilder, that allows adding up to 64 font families per typeface.

Our icon font example can be implemented like this:

button.typeface = Typeface.CustomFallbackBuilder(
    // add the Latin font
    FontFamily.Builder(
        Font.Builder(assets, "lato.ttf").build()
    ).build()
).addCustomFallback(
    // add the icon font
    FontFamily.Builder(
        Font.Builder(assets, "icon_font.ttf").build()
    ).build()
).build()

When creating the font family, make sure you don't put fonts that belong to different families in the same font family object nor the same style fonts into the same font family. For example, putting Lato, Kosugi, and Material into the same font family creates an invalid configuration, as does putting two bold fonts into the same font family.

To define the general font family (serif, sans-serif, or monospace) to be used when text is rendered using system fonts, use the setSystemFallback() method to set the system fallback font:

Typeface.CustomFallbackBuilder(
    FontFamily.Builder(
       ...
    ).build()
).setSystemFallback("sans-serif")
.build()

Text styling API updates

Android Q brings several updates to different text styling APIs:

Improved support for variable fonts

TextAppearance now supports the fontVariationSettings attribute:

<style name="MyTextAppearance" parent="TextAppearance.AppCompat">
    <item name="android:fontVariationSettings">...</item>
</style>

The fontVariationSettings attribute can be set directly on the TextView in Android Q and in AppCompatTextView:

<TextView
    ...
    app:fontVariationSettings="..."
/>

Improved spans APIs

TextAppearanceSpan now supports typeface, shadow settings, fontFeatureSettings and fontVariationSettings.

LineBackgroundSpan and LineHeightSpan interfaces now have standard implementations: LineBackgroundSpan.Standard and LineHeightSpan.Standard.

Access system fonts

With more than 100 languages supported by Android, and with different fonts supporting different character sets, knowing which system font can render a given character is not trivial. Apps doing their own text rendering such as games, document viewers, or browsers need this information. In Android Q, you can retrieve the supported system font for a string with the FontMatcher NDK API.

System fonts that can render this text

System fonts that can render this text

Let's consider the above search string. The FontMatcher API returns us the font object and length. A simplified pseudocode example looks like this:

// font = NotoSansCJK-Regular.ttc
// length = 2
auto[font, length] = AFontMatcher_match("たすく a.k.a. のな");

// font = Roboto-Regular.ttf
// length = 8
auto[font, length] = AFontMatcher_match(" a.k.a. のな");

// font = NotoSansCJK-Regular.ttc
// length = 2
auto[font, length] = AFontMatcher_match("のな");

The FontMatcher API never returns nullptr:

If you want to get all available system fonts, you can do this with a new font enumeration API. In Java, you can use SystemFonts.getAvailableFonts, or in the NDK, you can use ASystemFontIterator. The results of the font enumeration are changed only by a system update, so you should cache them.

Font updates

New Myanmar font

Android added a new Myanmar font to Android Q that is Unicode-compliant and capable of rendering both Unicode and non-Unicode Burmese (commonly known as Zawgyi), right out of the box. This means starting in Android Q, Android makes it easier for users to switch to Unicode: a user can now use a Unicode font to read Unicode and non-Unicode text for the first time. Android also added new requirements to the Android ecosystem CDD that takes a stronger stance in requiring Unicode, including a new subtag "Qaag" which OEMs should use as a locale designating non-Unicode Burmese. All of these changes should make developers' life easier in the long term, as reduced ecosystem fragmentation makes it easier to develop for our 50M users in Myanmar.

New emojis

New emojis in Android Q

Emojis in Android Q

Say Hello to your new emoji friends! The latest update includes a number of disability-focused emojis, multi-racial couples, as well as a few cute animals and household objects. See the latest and greatest in Gboard on your Android Q device of choice.

Text plays an important role in a vast majority of apps, so we're continuing to invest in improving text API features and performance. Learn more about the new APIs in Android Q along with best practices when working with text in our Google I/O 2019 talk:

11 Jul 2019 5:10pm GMT

10 Jul 2019

feedAndroid Developers Blog

Android Q Beta 5 Update

Posted by Dave Burke, VP of Engineering

AndroidQ logo

Android Q Beta 5 launches today! Today we're rolling out Beta 5, bringing Android Q Beta very close to the system behaviors you'll see in the final release. Developer APIs were already finalized in the previous update. So, now is the time to test your apps for compatibility and make sure they are ready!

You can get Beta 5 today on Pixel devices by enrolling here. If you're already enrolled and received Beta 4 on your Pixel device, you'll automatically get the update to Beta 5. Partners participating in the Android Q Beta program will also be updating their devices to Beta 5 over the coming weeks.

To get started with Android Q Beta, visit developer.android.com/preview.

What's in Beta 5?

The Beta 5 update includes the latest Android Q system images for Pixel and Android jEmulator, along with the final Android Q developer APIs (API level 29), the official API 29 SDK, and updated build tools for Android Studio. These give you everything you need to test your apps on Android Q and build with Android Q features.

Gestural navigation updates

As we talked about at Google I/O, we've been working closely with device-maker partners to ensure a standardized Android gestural navigation for users and developers. Gestural navigation lets apps use the full screen for content while minimizing the visible system chrome and navigation - which is particularly important on today's edge-to-edge screens. In Beta 5 we're continuing to improve and polish based on your feedback and we wanted to provide an update on a few key areas.

We've introduced a swipe gesture from either corner to get to the Assistant - you'll notice indicators in the bottom corners that we're continuing to tune.

For apps using a navigation drawer, we've added a peek behavior when users have grabbed the drawer to indicate that a swipe will bring in the navigation drawer. This works for all versions of DrawerLayout, with DrawerLayout 1.1.0-alpha02 optimized for the best experience.

Custom launchers are another area where we've heard feedback and we're continuing to work on issues, particularly with stability and Recents. Starting in Beta 6, we'll switch users to 3-button navigation when they are using a custom launcher by default. We'll address the remaining issues in a post-launch update allowing all users to switch to gestural navigation. Meanwhile, please continue to give us your feedback.

Get your apps ready for Android Q!

With the consumer release coming soon, it's highest priority for all Android developers to update your current apps for compatibility as soon as possible.

Here's how to do it:

We realize that supporting these changes is an investment for you too, and we're working to minimize the impact on your apps and be responsive to your input as we move toward the final release.

Enhance your app with Android Q features and APIs

Next, when you're ready, dive into Android Q and learn about the new features and APIs that you can use. Here are some of the top features to get started with.

We recommend these for every app:

We recommend these if relevant for your app:

These are just a few of the many new features and APIs in Android Q -- to see them all, visit the Android Q Beta site for developers.

Publish your app updates to Google Play

As soon as you're ready, publish your APK updates to Google Play that are compiled against, or optionally targeting, API 29. To make sure that your updated app runs well on Android Q as well as older versions, try using Google Play testing tracks. With tracks you can safely get early feedback from a small group of users -- including Beta 5 users - and then do a staged rollout to production.

How do I get Beta 5?

It's easy! Just enroll any supported Pixel device here to get the update over-the-air. If you're already enrolled, you'll receive the update soon and no action is needed on your part. Downloadable system images are also available here. Partners who are participating in the Android Q Beta program will be updating their devices over the coming weeks. See android.com/beta for details.

To get started developing, download the official API 29 SDK and tools into the stable release of Android Studio 3.4, or for the latest Android Q support update to Android Studio 3.5 Beta. Then follow these instructions to configure your environment, and see the release notes for known issues.

There will be one more Beta release before the consumer launch later this quarter. Please continue to share your feedback and requests -- you can use our hotlists for filing platform issues (including privacy and behavior changes), app compatibility issues, and third-party SDK issues.

Also, the Android engineering team will host a Reddit AMA on r/androiddev to answer your technical questions about Android Q later this month. Look out for an announcement on r/androiddev with details in the coming weeks. We look forward to addressing your questions!

10 Jul 2019 4:59pm GMT

03 Jul 2019

feedAndroid Developers Blog

Capturing Audio in Android Q

Posted by Don Turner, Developer Advocate for Android Media

In Android Q there's a new API which allows applications to capture the audio of other applications. It's called the AudioPlaybackCapture API and it enables some important use cases for easier content sharing and accessibility.

Some examples include:

There may be some situations where a developer wishes to disallow the capture of their app's audio. This article explains how audio capture works for users and how developers can disallow their app's audio from being captured if they need to.

What does the user see?

In order to capture the audio of other apps the user must grant the record audio permission to the app doing the capturing.

AUDIO_RECORD permissions dialog

AUDIO_RECORD permissions dialog

Additionally, before a capture session can be started the capturing app must call MediaProjectionManager.createScreenCaptureIntent(). This will display the following dialog to the user: screen capture intent dialog

Screen capture intent dialog

The user must tap "Start now" in order for a capturing session to be started. This will allow both video and audio to be captured.

cast icon showing red in status bar

Cast icon showing red in status bar

During a capture session the cast icon is shown in red in the status bar.

Can my app's audio be captured?

Whether your app's audio can be captured by default depends on your target API. Here's a table which summarizes the default behaviour:

Target API Third party apps can capture your app's audio by default? System apps and components can capture your app's audio by default?
28 and below No, the app needs to explicitly opt-in Yes for audio with usage type MEDIA, GAME and UNKNOWN
29 Yes for audio with usage type MEDIA, GAME and UNKNOWN Yes for audio with usage type MEDIA, GAME and UNKNOWN



Disallowing capture by third party apps

There may be situations where an app wishes to disallow its audio from being captured by other apps. This could be because the audio contains:

An app's audio capturing policy can be set either for all audio or for each individual audio player.


Disallowing capture of all audio by third party apps

To disallow capture of all audio by third party apps you can do either of the following:

Add the following to your AndroidManifest.xml <application

...

android:allowAudioPlaybackCapture="false"/>

Programmatically disable capture by running the following code prior to playing audio AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)



Disallowing capture on a per player basis by third party apps

To disallow capture for an individual player you can set the capture policy for the audio player when it is built by calling:

AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)

This approach may be useful if your app plays content with differing licenses. For example, both copyrighted and royalty-free content.


Disallowing capture by system apps and components

By default system apps and components are allowed to capture an app's audio if its usage is MEDIA, GAME and UNKNOWN, as this enables important accessibility use cases, such as live captioning.

In rare cases where a developer wishes to disallow audio capture for system apps as well they can do so in a similar way to the approach for third party apps. Note that this will also disallow capture by third party apps.


Disallowing capture of all audio

This can only be done programmatically by running the following code before any audio is played:

AudioManager.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)



Disallowing capture on a per player basis

To disallow capture for an individual player you can set the capture policy for the audio player when it is built:

AudioAttributes.Builder.setAllowedCapturePolicy(ALLOW_CAPTURE_BY_NONE)



What next?

If your app is targeting API 28 or below and you would like to enable audio capture add android:allowAudioPlaybackCapture="true" to your app's manifest.xml.

If you would like to disallow some or all of your audio from being captured then update your app according to the instructions above.

For more information check out the Audio Playback Capture API documentation.

03 Jul 2019 2:00pm GMT

02 Jul 2019

feedAndroid Developers Blog

Indie Games Showcase from Google Play - meet the winners!

Posted by Patricia Correa, Director, Developer Marketing

We just wrapped up the Indie Games Showcase in Europe, Japan & South Korea! Back in March we started our search for some of the newest and most creative indie titles from these regions. The search culminated last week with the celebration of indie developers at events in London, Tokyo, and Seoul, and the selection of the winners from our finalists. Developers from 12 countries traveled to the events and showcased their games to the audience of gamers, industry experts, YouTube creators, and journalists.

The games were on show to the public, who spent several hours trying out their games and voting for their favourites, alongside the Google Play team. The top 10 finalists were then selected, and went on to pitch their games, and compete for big prizes in front of the jury.

collage of event pictures

Now, we are happy to announce the winners from each region! They will be returning home with a prize package that includes promotions on the Google Play Store, consultations with Google teams, Google hardware, and more.

We also want to take this opportunity to congratulate all the other finalists and developers who entered the competition this year. We are impressed by your creativity and passion, and hope you will continue to create amazing experiences for players worldwide.

European illustration with Eiffel Tower and Matryoshka dolls

Europe

logos for the Europe top 3

G30 - A Memory Maze by Ivan Kovalov (Russia)

Ordia by Loju (United Kingdom)

Photographs by EightyEight Games (United Kingdom)


The other finalists as selected by audience and Google Play votes were:

logos for the European top 10

#DRIVE by Pixel Perfect Dude (Poland)

Fly THIS! By Northplay (Denmark)

Golf Peaks by Afterburn (Poland)

Rest in Pieces by Itatake (Sweden)

see/saw by Kamibox (Germany)

STAP by Overhead Game Studio (United Kingdom)

Tesla vs. Lovecraft by 10tons (Finland)

mt.Fuji and other Japanese emblems

Japan

logos for the Japan top 3

Infection - 感染 - by CanvasSoft

MeltLand by 個人

Bear's Restaurant by 個人


The other finalists as selected by audience and Google Play votes were:

logos for the Japan top 10

Lunch Time Fish by SoftFunk HULABREAKS

ReversEstory by 個人

Kamiori - カミオリ by TeamOrigami

キグルミキノコ Q-bit -第一章- by 個人

クマムシさん惑星 ミクロの地球最強伝説 by Ars Edutainment

Girl x Sun - Terasene - Tower defence & Novel game by SleepingMuseum

Persephone by Momo-pi

Korean space needle and temple

South Korea

logos for the South Korea top 3

ROOMS: The Toymaker's Mansion by HandMade Game

Seoul2033: Backer by Banjiha Games

Cartoon Craft by Studio NAP


The other finalists as selected by audience and Google Play votes were:

logos for the South Korea top 10

Hexonia by Togglegear

Hexagon Dungeon by Bleor Games

7Days - Decide your story by Buff Studio

WhamBam Warriors by DrukHigh

Onslot Car by Wondersquad

Maze Cube by IAMABOY

언노운 나이츠 by teamarex

How useful did you find this blog post?


02 Jul 2019 4:41pm GMT

26 Jun 2019

feedAndroid Developers Blog

Advanced in-app billing: handling alternative purchase flows

Posted by Oscar Rodriguez, Developer Advocate

When designing and developing an app or game, at some point you may ask yourself if you want to monetize it.

If you choose to do so by selling products via Google Play, you will most likely have a store screen that shows available items for sale, and use the Google Play Billing Library to display dialogs that allow your users to complete their purchase.

While there is a more detailed explanation in the documentation and in the Billing Library TrivialDrive samples, the general flow is as follows:

  1. Call the launchBillingFlow() method from the UI thread to launch the Google Play purchase dialog.
  2. If the purchase was successful, Google Play calls the onPurchasesUpdated() method to deliver the result of the purchase operation.
  3. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  4. Acknowledge the purchase either with consumeAsync() for consumable items or with acknowledgePurchase() for non-consumable items.
  5. Finally, grant entitlement to the purchased item inside the app.

If your app is still using the Google Play Billing AIDL API, it is also possible to perform the same task. Keep in mind that the AIDL API is now deprecated, so we strongly recommend you migrate to the Google Play Billing Library as soon as possible.

If you are using the AIDL API, the flow is very similar:

  1. Send a getBuyIntent() or getBuyIntentExtraParams() request to specify the item to purchase, and then call startIntentSenderForResult() to launch the Google Play purchase dialog.
  2. When the purchase dialog finishes, Google Play sends a response Intent to your onActivityResult() method, where you can verify if the purchase was successful.
  3. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  4. If the purchase was successful, call the getPurchases() method to retrieve a list of owned items that are still not consumed. For consumable items, call the consumePurchase() method to make the item available for purchase again.
  5. Finally, grant entitlement to the purchased item inside the app.

Nevertheless, just implementing the above mentioned flow is not enough to correctly handle all types of purchases. There are two main cases in which purchases will not be correctly handled by this flow.

The first case happens when the purchase flow is interrupted before it finishes. The app may have crashed, the user may have killed the app, or the user's Internet connection may have been lost. In any case, it is possible for the app not to have delivered the item to the user even though Google Play has already processed the payment. In this case, the item is in limbo, because Google Play will not allow an item to be re-purchased until it is consumed, but the app or game won't consume the item outside of the flow mentioned above.

The second case happens during alternative purchase flows, such as in-app promotions, the recently announced out-of-app subscription surfaces, promo codes for subscriptions, or other promotions in collaboration with Google. In these cases, a user gets an item directly on the Play Store app, while the target app or game may be paused, not running, or even not installed.

For these cases, the Google Play Billing Library and the Google Play Billing AIDL API offer a mechanism to detect purchases that are not acknowledged or consumed.

When using the Google Play Billing API, do the following:

  1. In your app's onResume() callback, call the queryPurchases() method to retrieve a list of items, so you can determine which ones are unacknowledged.
  2. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  3. If there are owned but unacknowledged items, acknowledge the purchase either with consumeAsync() for consumable items or with acknowledgePurchase() for non-consumable items.
  4. Grant entitlement to the purchased item inside the app.

For the Google Play Billing AIDL API, do the following:

  1. In your app's onResume() callback, call the getPurchases() method to retrieve a list of owned items that are still not consumed.
  2. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  3. For consumable items, call the consumePurchase() method to make the item available for purchase again.
  4. Finally, grant entitlement to the purchased item inside the app.

In either case, when you detect and process an unconsumed item in this manner, users will expect the app or game to communicate about it. We suggest that you display a dialog, message box, or notification that tells the user that they have successfully received their item.

Keep in mind that your app's onResume() callback will be called when its process is started, as well as when it is brought to the foreground, regardless of which screen the app or game was in before it was paused. For example, a game with a home screen, a store screen, and a game screen might get its onResume() called from any of those screens. For an optimal user experience, we suggest you make it so your app or game handles unacknowledged or unconsumed items regardless of the screen you display when onResume() gets called. Thorough testing of this process in each screen is crucial to deliver a great user experience.

Finally, there is one more case your app must handle: when a user acquires an item from the Play Store app, and both the Play Store app and your app are visible at the same time with multi-window mode.

To support this scenario with the Google Play Billing Library, do the following:

  1. Google Play calls the onPurchasesUpdated() method to notify your app that there is a new pending item.
  2. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  3. Acknowledge the purchase either with consumeAsync() for consumable items or with acknowledgePurchase() for non-consumable items.
  4. Finally, grant entitlement to the purchased item inside the app.

For the Google Play Billing AIDL API, do the following:

  1. In your app's onResume() callback, register a PurchasesUpdatedListener to receive the com.android.vending.billing.PURCHASES_UPDATED intent. Also, in your app's onPause() callback, unregister the listener.
  2. If your app has a server, we strongly recommend that you verify the purchase from your server by using the Subscriptions and In-App Purchases API.
  3. Google Play calls your listener to notify your app that there is a new pending item. Inside it, call the getPurchases() method to retrieve a list of owned items that are still not consumed. For consumable items, call the consumePurchase() method to make the item available for purchase again.
  4. Finally, grant entitlement to the purchased item inside the app.

Just as before, you should display a dialog, message box, or notification that tells the user that they have successfully received their item.

If you follow these steps, your app or game will be better prepared to robustly handle purchase flow interruptions and alternative purchase flows.

26 Jun 2019 5:31pm GMT