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.
Fast Pair makes pairing seamless across Android phones – this year, we are introducing additional features to improve Bluetooth device management.
True Wireless Features. As True Wireless Stereo (TWS) headphones continue to gain momentum in the market and with users, it is important to build system-wide support for TWS. Later this year, TWS headsets with Fast Pair will be able to broadcast individual battery information for the case and buds. This enables features such as case open and close battery notifications and per-component battery reporting throughout the UI.
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.
Below is a list of devices that were showcased during our I/O talk:
Anker Spirit Pro GVA
Anker SoundCore Flare+ (Speaker)
JBL Live 220BT
JBL Live 400BT
JBL Live 500BT
JBL Live 650BT
1More Dual Driver BT ANC
Cleer Ally Plus
Interested in Fast Pair?
If you are interested in creating Fast Pair compatible Bluetooth devices, please take a look at:
With the huge pressures that life can put on relationships — from work-related stress to health issues, becoming parents and even social media — it’s no wonder many of us feel insecure at times. Likewise, most of us have, at one point or another, found ourselves trying to reassure a partner who doesn’t feel as confident in a relationship as they should.
When one person in a partnership becomes insecure, the need for reassurance can sometimes set off an unpleasant cycle of neediness, impatience, and more insecurity. If dealt with correctly, however, it’s possible to break the negative behavioral patterns and reach a stronger, more confident phase in your relationship.
This, of course, has to be a labor of love between the two of you. If you are currently in that stage, here’s how to deal with an insecure partner.
Identify the source of the problem together
There are countless reasons why people feel insecure in relationships. It could be leftover pain from a previous romance, your partner’s sense of self-worth or something you have done or continue to do.
These issues can be big: perhaps you fear commitment or have cheated in the past. They can also be small: your new hobby clashes with date night. Health issues like erectile dysfunction can also be tough on a partner since this impacts intimacy.
Whatever the root of this insecure feeling is, you must identify it together in order to move forward. That’s the first step in learning how to deal with an insecure partner.
Who does the problem lie with — and are they willing to change?
If your partner is generally jealous and needy, this could stem from their past experiences and overall level of self-esteem. Knowing they can trust you may not be enough. That FOMO or feeling of being left out and the inability to share you with friends can all add up to make your daily lives tricky.
Can your partner identify that they are the problem? Are they ready to find new ways to deal with this?
Likewise, if you regularly go out partying till the early hours, without so much as a friendly text to your other half, can you put yourself in your partner’s shoes and understand how such behavior might make them feel?
When a person is insecure, they tend to jump to the most negative conclusions. They fill in the blanks with the most disastrous possible assumptions and let their imagination run to the worst-case scenario time and again.
By making a bigger effort than usual to communicate, you can prevent your partner from having to guess what you’re doing and feeling. Send a straightforward text message explaining where you are and who with. Make the effort to put into words how much you appreciate your partner, even if that’s out of your comfort zone. Who knows, it may not just be your partner who benefits from this openness.
Very often, one person in a relationship assumes dominance. They take the lead on travel plans and their friends are central to the couple’s social world. Their life choices may inform those of their partner.
As the leader in your partnership, you can support your partner to feel more secure by helping them form bonds and achieve things outside of your relationship. Making a new friend they can hang with when you’re working or taking up a shiny new hobby could help take their mind off irrational doubts and fears.
If you’re convinced that this insecurity is coming from a harmless place and you’ve talked about it sensibly, calmly and with each other’s best intentions at heart, it’s time for you both to stop indulging your partner’s doubts, move on, and get the fun back. While it’s paramount not to make little of your loved one’s insecurities, finding ways to laugh together is a surefire way to strengthen the bond you share.
It sounds obvious, but your favorite sitcom, play fights, and stand-up comedy evenings are some of the quickest methods to get you laughing together and feeling connected.
Having a quick chat and whisking your partner off for a night of fun is rendered useless if the following week you’ve entirely forgotten your other half’s distress. While they may seem to be dealing with things better, it’s up to you to keep in mind that future scenarios could trigger their doubts.
If you know your partner can trust you and has no deep-seated reason to be insecure, other than the lack of confidence that plagues us all at times, make the effort to renew your reassuring actions over the weeks, months and years of your relationship. Small changes can often reap the biggest rewards.
It’s good to advocate others about accessibility problems, about how to listen better to others in a conversation, how to manage projects, products or even a company better. The most important thing on all these actions is to remember that they are helping other people and not impacting them as well as animals or our environment in general.
Doing something useful — as small as it might seem — is always a good thing. And don’t forget to honor your action just by smiling and being thankful for what you did!
Chrome 76 removes a couple of things like feature policy: lazyload, insecure usage of DeviceMotionEvent and the DeviceOrientationEvent. If you use them, please ensure you use a secure context by now or replace them by their successors.
Have you heard of the concept of “good trouble”? Frank Chimero defines it as questioning and re-imagining the status quo, and having your actions stand in contrast to the norm. But the interview with the designer shows much more than a new concept, it’s challenging how we work today and how to do your own thing that doesn’t match the norm of the society.
Particularly, I like this quote here:
“Slow down, find a quiet place and create time for solitude so you can hear yourself. It’s so noisy out there.”
What if control is only an illusion? We would realize that the true nature of an experience is revealed only in the interplay with the people who use it and that an invalidated design is nothing but an opinion. Quite a thought that puts our assumptions and approach on projects into a different light.
Active Listening is a skill that helps us listening for meaning, and how the other person is feeling instead of that usual listening that focuses on ‘how can I reply or comment on this or how will we solve this?’. Buffer’s guide written by Marcus Wermuth is a great resource to learn and practice Active Listening.
Ben Werdmüller on doing well while doing good: This is a personal story about struggling with revenue, investments, third-party capital, trying to earn money on your own by selling your product while having free competitors and how to still produce good things while doing financially well.
Shape Up — Stop Running in Circles and Ship Work that Matters is a new, free online book by Ryan Singer about project management, leading a company and product. It’s amazing and while I only had time to flick through it quickly and read some individual chapters and sections, this will definitely become a resource to save and refer to regularly.
I was in the cinema last week to watch a movie about some people who created a farm. The trailer was nice and while I wasn’t 100% convinced of it, it was an evening where I was up to go out to watch a movie. So I did and it was good that I went to see “The Biggest Little Farm”. The farmer made the film himself as he’s a wildlife filmmaker so expect some quite stunning pictures and sequences of wildlife animals in there!
The most revealing part was how much of an impact only a handful of people can make out of desert land in a few years of time, and how much we as humans can influence wildlife, give a habitat to insects, and produce quality food while including CO2 from the air into our soil to make plants grow better, in order to restore nature and make an impact in the effort to fight climate change.
At several points during the movie, I was close to tears and I was extremely thankful that I’m able to have my little garden space as well where I can do similar things (though way smaller than their farm). If you’re up for something new, to learn something about food, meat, economy and how it all connects or how to create a beautiful green space out of desert, this movie is for you.
Posted by Wojtek Kaliciński, Developer Advocate, Android
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:
Android Jetpack APIs now have first class support for Kotlin Coroutines, transforming the way we do async operations on Android. This includes Room, LiveData, ViewModels, WorkManager and more coming in the future.
Our Developer Relations engineers are posting real life examples and guides on integrating Kotlin in your apps on our Medium publication, such as the great intro to Coroutines on Android series and many more.
If you prefer to learn Kotlin in person, you can join one of the many Kotlin/Everywhere events happening around the world. If you are an organizer in a local developer community, consider signing up to host your own event! This initiative is a cooperation between JetBrains and Google.
We have worked with many external partners to gather feedback and learn about their experiences with Kotlin, such as this case study with Square.
And lastly, we’ve enabled Kotlin as a supported language for Android app teams at Google. We’re already seeing adoption in apps such as Google Home, Google Drive, Android System UI, Nest, with many more to follow.
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.
Worldwide, 400,000 pickpocketing incidents occur daily. And more likely, this figure is higher since innumerable people assume items stolen from their backpacks or pockets were lost. Among the top risks associated with travel include theft, scamming, political unrest, natural catastrophes, and health risks.
While traveling might be fun, there’s always danger. With that, whether you’re traveling for business or pleasure, take into account the following safety tips for travelers.
Dodge street hazards
Thieves know many ways to separate a traveler from their valuables. The most prevalent threats include pickpockets, snatchers, and fake beggars. It’s no surprise that pickpockets are found in about all major tourist destinations.
To minimize risks, carry valuables (credit cards, passport, and money) close to you. Don’t carry your wallet in the rear pocket. If anything, wear a hidden pouch above the belt.
In case you are carrying a handbag, hold it firmly and move away from busy streets. Similarly, if you are approached by a quirky beggar—holding a placard—walk away. Otherwise, you’ll get distracted and lose a valuable item to an unseen pickpocket.
Likewise, don’t use public Wi-Fi. Public Wi-Fi grease the wheels for criminals to hack into the information stored in your laptop or mobile phone. If you can’t avoid using the internet, use your portable router. All you’ll need is a local SIM card.
Don’t offend or disrespect with inappropriate dress or manners. As much as possible, wear clothing similar to locals. Avoid clothing with your country’s flag, political statements or hometown brands. Don’t wear expensive-looking jewelry and imprinted tote bags, too.
If you are going to a party several kilometers from home, don’t get too drunk and always take a taxi at night. If it allows, consider investing in a ride, especially if you feel uncomfortable walking in isolated streets at night. Also, consider learning a few things from the locals, including how to speak their language.
Do Your Research
Don’t be uninformed about where you are going. Apart from knowing these safety tips for travelers, it’s important to know your travel destination comprehensively beforehand. Learn about the cultural norms and the political situation.
Make an effort to check websites for country updates and obtain contact information for the nearest local emergency department, embassy or police station.
Besides, be familiar with who to call in the event of an emergency. Read traveler reviews and ask the residents for information about incidences of crime, places to stay, and safe neighborhoods.
Any time I start working on a new project, I ask myself, “Should I use separate git repositories for my back-end server and my front-end client(s)? What’s the best way to organize the codebase?”
I had this same question after a few months working on my personal website. I originally had all the code in the same repository: the back end used Node.js and the front end used ES6 with Pug. I adopted this organization for convenience, since having both projects in the same repo made it easy to search for functions and classes, and facilitated refactors. However, I found some downsides:
No independent deployments. Both apps were using the same package.json, and there was no clear separation on both projects.
Unclear boundaries. Since I rely on a global package.json, I didn’t have a mechanism to set specific versions for the back end and front end.
Shared utilities and code without versioning.
After some research, I found that Yarn workspaces was a great tool to solve those cons, and it was a helpful tool to create a monorepo project (more to come later!).
In this article, I share an intro to Yarn workspaces. We’ll run through a tutorial together on how to create your first project with it, and we’ll finish with a recap and next steps.
What Are Yarn Workspaces?
Yarn is a package manager by the folks at Facebook, and it has a great feature called Yarn workspaces. Yarn workspaces let you organize your project codebase using a monolithic repository (monorepo). The idea is that a single repository would contain multiple packages. Packages are isolated and could live independent of the larger project.
As an alternative, we could place all of these packages into separate repositories. Unfortunately, this approach affects the shareability, efficiency, and developer experience when developing on the packages and their dependent projects. Furthermore, when we work in a single repository we can move more swiftly and build more specific tooling to improve processes for the entire development life cycle.
React is a good example of an open-source project that is monorepo. Also, React uses Yarn workspaces to achieve that purpose. In the next section we will learn how to create our first monorepo project with Yarn.
Creating A Monorepo Project With React And Express Using Yarn Workspaces In Six Steps
So far, we have learned what Yarn is, what a monorepo is, and why Yarn is a great tool to create a monorepo. Now let’s learn from scratch how to set up a new project using Yarn workspaces. To follow along, you’ll need a working environment with an up-to-date npm install. Download the source code.
To fully complete this tutorial, you will need to have Yarn installed on your machine. If you haven’t installed Yarn before, please follow these instructions.
These are the steps we’ll be following in this tutorial:
2. Create A React Project And Add It To The Workspace List
In this step, we will create a new React project and add it to the list of packages inside the root workspace.
First, let’s create a folder called packages where we will add the different projects we will create in the tutorial:
$ mkdir packages
Facebook has a command to create new React projects: create-react-app. We’ll use it to create a new React app with all the required configuration and scripts. We are creating this new project with the name “client” inside the packages folder that we created in step 1.
$ yarn create react-app packages/client
Once we have created our new React project, we need to tell Yarn to treat that project as a workspace. To do that, we simply need to add “client” (the name we used earlier) inside the “workspaces” list in the root package.json. Be sure to use the same name you used when running the create-react-app command.
Note: This tutorial is simplified with only two packages (server and client). In a project, you might typically have as many packages as you need, and by convention the open-source community use this naming pattern:@your-project-name/package-name. For example: I use@ferreiro/serveron my website.
4. Install All The Dependencies And Say Hello To yarn.lock
Once we have added our React app, as well as our Express server, we need to install all the dependencies. Yarn workspaces simplifies this process and we no longer need to go to every single application and install their dependencies manually. Instead, we execute one command — yarn install — and Yarn does the magic to install all the dependencies for every package, and optimize and cache them.
Run the following command:
$ yarn install
This command generates a yarn.lock file (similar to this example). It contains all the dependencies for your project, as well as the version numbers for each dependency. Yarn generates this file automatically, and you should not modify it.
5. Using A Wildcard (*) To Import All Your Packages
Until now, for every new package we have added, we were forced to also update the root package.json to include the new package to the workspaces: list.
We can avoid this manual step using a wildcard (*) that tells Yarn to include all the packages inside the packages folder.
Last step! We need to have a way to run both packages — the React client and the Express client — simultaneously. For this example, we will use concurrently. This package let us run multiple commands in parallel.
Add concurrently to the root package.json:
$ yarn add -W concurrently
Add three new scripts inside the root workspace package.json. Two scripts initialize the React and Express clients independently; the other one uses concurrently to run both scripts in parallel. See this code for reference.
Note: We will not need to write ourstartscripts into the “server” and “client” packages because the tools we used to generate those packages (create-react-appandexpress-generator) already add those scripts for us. So we are good to go!
Finally, make sure you update the Express boot-up script to run the Express server on port 4000. Otherwise, the client and server will try to use the same port (3000).
var port = normalizePort(process.env.PORT || '4000');
Now we are ready to run our packages!
$ yarn start
Where To Go From Here
From this point, I’d suggest you review open-source projects in detail to see how they use Yarn workspaces to split the project logic into many packages. React is a good one.
Also, if you want to see a production website using this approach to separate back-end and front-end apps into independent packages, you can check the source of my website, that also includes a blog admin. When I migrated the codebase to use Yarn workspaces, I created a pull request with Kyle Wetch.
Moreover, I set up the infrastructure for a hackathon project that uses React, webpack, Node.js, and Yarn workspaces, and you can check the source code over here.
Finally, it would be really interesting for you to learn how to publish your independent packages to become familiar with the development life cycle. There are a couple of tutorials that are interesting to check: yarn publish or npm publish.
For any comments or questions, don’t hesitate to reach out to me on Twitter. Also, in the following months, I’ll publish more content about this in my blog, so you can subscribe there as well. Happy coding!
There’s a fun quote around productivity that always makes me smile when I read it:
“Drink Coffee – Do stupid things faster, with more energy!”
While I enjoy a good cup of coffee, there are definitely more efficient ways to completing your daily tasks to increase productivity. In my desire to be more productive during my time at work, I have run across some great ideas for strengthening everyday productivity. Here are 10 productivity tips for you, whether you’re tired of your physical surroundings at work, or are looking for some fresh mindsets to enhance your efficiency.
5 Organizational Ideas For Your Work to Increase Productivity
1. Drink More Water
Staying hydrated is an essential part of staying productive. Your body needs water; not pop, or coffee, or an energy drink. If you need to be convinced of this fact, read this article on the benefits of drinking water. Keep a water bottle within arm’s reach at all times and use it. If you are working at a computer, use your stretch break as an opportunity to rehydrate. This habit, once formed will help power your body, keep your mind clear, and provide a great alternative to unnecessary calories.
2. Lose the Phone
This practice is easier for some than for others. If you need access to your smartphone to complete your work, then disable or silence notifications. If you don’t need your phone to work, put it in another room, out of arm’s reach, or at least out of site. Every time you stop what you are working on to glance at your smartphone or send a quick reply, you’re derailing your productivity. Rebecca Benson states in her Pick The Brain article, “It’s also pretty obvious that phones are incredibly distracting – it’s all too tempting to stop what you’re doing to get the instant gratification of scrolling through Facebook or checking that WhatsApp message.” I couldn’t agree more.
3. Create an Inspiring Workspace
Developing a workspace that promotes healthy habits and helps you focus is a great achievement. Why not add to that environment by developing an atmosphere that boosts your creativity? Print out a handful of quotes that inspire you and display them prominently. An encouraging photo of family or friends can be just the inspiration you need to keep working effectively. Bringing natural light or a houseplant into your office is a great way to stay relaxed as you work. You get the idea. Surround yourself with an exclusive selection of reminders to keep you inspired and productive.
4. Use Music to Aid Your Work
The jury seems to be out on whether or not listening to music while you work is truly beneficial. (Studies have provided varied results) The safe way to apply this idea is personal experimentation. If you are easily distracted by sudden noises, some ambient music might work well to help you stay on task. On a long and difficult project, epic and uplifting music may give you the emotional lift you need. Piano sonatas are a good choice to help minimize stress and keep you relaxed. The key is to leverage music to promote your work, not distract you from your work.
5. Keep a Tidy Workspace
The old saying “A place for everything and everything in its place” has never been more applicable than in your workzone. Start by making a list of the essentials: the tools and resources you need every day to complete your tasks. Then, organize them and make them accessible. This can be applied to physical objects as well as digital information. (using a password protection app can be a great way to put this into practice) The less time you spend searching the more time you can spend working toward your goal.
5 Organizational Ideas For Your Mind
1. Plan Your Day the Night Before
A healthy amount of sleep is crucial to staying productive, but getting your brain to turn off isn’t always easy. Make a habit of writing down your goals for the next day, before you try going to sleep. This approach not only allows you to get your ideas down on paper (and off your mind) it also gives you a chance to reevaluate and edit your goals the next morning – after you’re rested.
2. Focus on Your Big Three
Once your To-Do list has taken form, it’s time to prioritize. Michael Hyatt talks about focussing on your Big 3 for each day: three tasks that are both essential and time sensitive. Identifying your priorities is a huge step toward achieving them, so take the time to single out your top goals for the day. Then, keep them in a conspicuous spot to help you refocus when you’re in danger of being distracted.
3. Find Your Optimal Timespan
How long can you work on a task before you burn out? More importantly, how long does it take before your productivity on a given task begins to wane? 15 minutes of cold calling? 30 minutes of designing? 1 hour of writing? Figure out your optimal timeframe for a given project and stick to it. As long as you can stay ahead of any deadlines, this approach to work allows you to optimize your time. Try to divide up your day into time slots that are most effective for your work style.
4. Encourage Productive Habits
Sometimes I get so excited about trying something new, that I overlook something great that’s already a part of my life. It’s tempting to think that some new method is going to immediately and drastically improve my life. (I call this Selective Optimism) Before you go crazy trying to revamp your work day, take a look at habits you’ve already formed. Ask a friend, coworker, or your spouse to help you identify strengths you’ve already formed. Then, find ways to establish those habits; let’s keep a good thing going.
5. Appreciate Variety
This last tip is about living life to the fullest, whether you are working, playing, resting or just trying to stay sane. Realizing the importance of routine is vital to staying productive throughout the day. If you can find purpose in whatever you are doing, you’ll be one step closer to thoroughly enjoying each day. Work is great, so is rest. Appreciate them both and know when to stop one and start the other.
Before you dive into your pile of tasks this next week, take another look at how you get things done. Is there a time of day when you tend to drag? Do you feel disorganized and overwhelmed by the clutter surrounding your computer? Are you having trouble getting your mind to relax after you’ve “clocked out”? My hope is that at least one of these 10 tips will enhance your work day and help you achieve greater productivity. Have fun experimenting!
These are interesting experiments and directions that are exploring how to make Console apps easier to write, more compelling, and more useful.
The one I am the most infatuated with is DragonFruit.
Historically Console apps in classic C look like this:
int main(int argc, char *argv)
That first argument argc is the count of the number of arguments you’ve passed in, and argv is an array of pointers to ‘strings,’ essentially. The actual parsing of the command line arguments and the semantic meaning of the args you’ve decided on are totally on you.
C# has done it this way, since always.
static void Main(string args)
It’s a pretty straight conceptual port from C to C#, right? It’s an array of strings. Argc is gone because you can just args.Length.
If you want to make an app that does a bunch of different stuff, you’ve got a lot of string parsing before you get to DO the actual stuff you’re app is supposed to do. In my experience, a simple console app with real proper command line arg validation can end up with half the code parsing crap and half doing stuff.
myapp.com someCommand --param:value --verbose
The larger question – one that DragonFruit tries to answer – is why doesn’t .NET do the boring stuff for you in an easy and idiomatic way?
From their docs, what if you could declare a strongly-typed Main method? This was the question that led to the creation of the experimental app model called “DragonFruit”, which allows you to create an entry point with multiple parameters of various types and using default values, like this:
static void Main(int intOption = 42, bool boolOption = false, FileInfo fileOption = null)
Console.WriteLine($"The value of intOption is: intOption");
Console.WriteLine($"The value of boolOption is: boolOption");
Console.WriteLine($"The value of fileOption is: fileOption?.FullName ?? "null"");
In this concept, the Main method – the entry point – is an interface that can be used to infer options and apply defaults.
/// DragonFruit simple example program
/// <param name="verbose">Show verbose output</param>
/// <param name="flavor">Which flavor to use</param>
/// <param name="count">How many smoothies?</param>
static int Main(
string flavor = "chocolate",
int count = 1)
> dotnet run --flavor Vanilla --count 3
Creating 3 banana smoothies with Vanilla
The way DragonFruit does this is super clever. During the build process, DragonFruit changes this public strongly typed Main to a private (so it’s not seen from the outside – .NET won’t consider it an entry point. It’s then replaced with a Main like this, but you’ll never see it as it’s in the compiled/generated artifact.
I really like this idea and I’d love to see it taken further! Have you used DragonFruit on a project? Or are you using another command line argument parser?
Sponsor: Ossum unifies agile planning, version control, and continuous integration into a smart platform that saves 3x the time and effort so your team can focus on building their next great product. Sign up free.
Today Android is celebrating two amazing milestones. It’s Android’s version 10! And today, Android is running on more than 2.5B active Android devices.
With Android Q, we’ve focused on three themes: innovation, security and privacy, and digital wellbeing. We want to help you take advantage of the latest new technology — 5G, foldables, edge-to-edge screens, on-device AI, and more — while making sure users’ security, privacy, and wellbeing are always a top priority.
Earlier at Google I/O we highlighted what’s new in Android Q and unveiled the latest update, Android Q Beta 3. Your feedback continues to be extremely valuable in shaping today’s update as well as our final release to the ecosystem in the fall.
This year, Android Q Beta 3 is available on 15 partner devices from 12 OEMs — that’s twice as many devices as last year! It’s all thanks to Project Treble and especially to our partners who are committed to accelerating updates to Android users globally — Huawei, Xiaomi, Nokia, Sony, Vivo, OPPO, OnePlus, ASUS, LGE, TECNO, Essential, and realme.
Visit android.com/beta to see the full list of Beta devices and learn how to get today’s update on your device. If you have a Pixel device, you can enroll here to get Beta 3 — if you’re already enrolled, watch for the update coming soon. To get started developing with Android Q Beta, visit developer.android.com/preview.
Privacy and security
As we talked about at Google I/O, privacy and security are important to our whole company and in Android Q we’ve added many more protections for users.
In Android Q, privacy has been a central focus, from strengthening protections in the platform to designing new features with privacy in mind. It’s more important than ever to give users control — and transparency — over how information is collected and used by apps, and by our phones.
Building on our work in previous releases, Android Q includes extensive changes across the platform to improve privacy and give users control — from improved system UI to stricter permissions to restrictions on what data apps can use.
For example, Android Q gives users more control over when apps can get location. Apps still ask the user for permission, but now in Android Q the user has greater choice over when to allow access to location — such as only while the app is in use, all the time, or never. Read the developer guide for details on how to adapt your app for the new location controls.
Outside of location, we also introduced the Scoped Storage feature to give users control over files and prevent apps from accessing sensitive user or app data. Your feedback has helped us refine this feature, and we recently announced several changes to make it easier to support. These are now available in Beta 3.
Another important change is restricting app launches from the background, which prevents apps from unexpectedly jumping into the foreground and taking over focus. In Beta 3 we’re transitioning from toast warnings to actually blocking these launches.
To keep users secure, we’ve extended our BiometricPrompt authentication framework to support biometrics at a system level. We’re extending support for passive authentication methods such as face, and we’ve added implicit and explicit authentication flows. In the explicit flow, the user must explicitly confirm the transaction. The new implicit flow is designed for a lighter-weight alternative for transactions with passive authentication, and there’s no need for users to explicitly confirm.
Android Q also adds support for TLS 1.3, a major revision to the TLS standard that includes performance benefits and enhanced security. Our benchmarks indicate that secure connections can be established as much as 40% faster with TLS 1.3 compared to TLS 1.2. TLS 1.3 is enabled by default for all TLS connections made through Android’s TLS stack, called Conscrypt, regardless of target API level. See the docs for details.
Today we also announced Project Mainline, a new approach to keeping Android users secure and their devices up-to-date with important code changes, direct from Google Play. With Project Mainline, we’re now able to update specific internal components within the OS itself, without requiring a full system update from your device manufacturer. This means we can help keep the OS code on devices fresher, drive a new level of consistency, and bring the latest AOSP code to users faster — and for a longer period of time.
We plan to update Project Mainline modules in much the same way as app updates are delivered today — downloading the latest versions from Google Play in the background and loading them the next time the phone starts up. The source code for the modules will continue to live in the Android Open Source Project, and updates will be fully open-sourced as they are released. Also, because they’re open source, they’ll include improvements and bug fixes contributed by our many partners and developer community worldwide.
For users, the benefits are huge, since their devices will always be running the latest versions of the modules, including the latest updates for security, privacy, and consistency. For device makers, carriers, and enterprises, the benefits are also huge, since they can optimize and secure key parts of the OS without the cost of a full system update.
For app and game developers, we expect Project Mainline to help drive consistency of platform implementation in key areas across devices, over time bringing greater uniformity that will reduce development and testing costs and help to make sure your apps work as expected. All devices running Android Q or later will be able to get Project Mainline, and we’re working closely with our partners to make sure their devices are ready.
Innovation and new experiences
Android is shaping the leading edge of innovation. With our ecosystem partners, we’re enabling new experiences through a combination of hardware and software advances.
This year, display technology will take a big leap with foldable devices coming to the Android ecosystem from several top device makers. When folded these devices work like a phone, then you unfold a beautiful tablet-sized screen.
We’ve optimized Android Q to ensure that screen continuity is seamless in these transitions, and apps and games can pick up right where they left off. For multitasking, we’ve made some changes to onResume and onPause to support multi-resume and notify your app when it has focus. We’ve also changed how the resizeableActivity manifest attribute works, to help you manage how your app is displayed on large screens.
Our partners have already started showing their innovative foldable devices, with more to come. You can get started building and testing today with our foldables emulator in canary release of Android Studio 3.5.
5G networks are the next evolution of wireless technology — providing consistently faster speeds and lower latency. For developers, 5G can unlock new kinds of experiences in your apps and supercharge existing ones.
Android Q adds platform support for 5G and extends existing APIs to help you transform your apps for 5G. You can use connectivity APIs to detect if the device has a high bandwidth connection and check whether the connection is metered. With these your apps and games can tailor rich, immersive experiences to users over 5G.
With Android’s open ecosystem and range of partners, we expect the Android ecosystem to scale to support 5G quickly. This year, over a dozen Android device makers are launching 5G-ready devices, and more than 20 carriers will launch 5G networks around the world, with some already broad-scale.
On top of hardware innovation, we’re continuing to see Android’s AI transforming the OS itself to make it smarter and easier to use, for a wider range of people. A great example is Live Caption, a new feature in Android Q that automatically captions media playing on your phone.
Many people watch videos with captions on — the captions help them keep up, even when on the go or in a crowded place. But for 466 million Deaf and Hard of Hearing people around the world, captions are more than a convenience — they make content accessible. We worked with the Deaf community to develop Live Caption.
Live Caption brings real-time captions to media on your phone – videos, podcasts, and audio messages, across any app—even stuff you record yourself. Best of all, it doesn’t even require a network connection — everything happens on the device, thanks to a breakthrough in speech recognition that we made earlier this year. The live speech models run right on the phone, and no audio stream ever leaves your device.
For developers, Live Caption expands the audience for your apps and games by making digital media more accessible with a single tap. Live Caption will be available later this year.
Suggested actions in notifications
In Android Pie we introduced smart replies for notifications that let users engage with your apps direct from notifications. We provided the APIs to attach replies and actions, but you needed to build those on your own.
Now in Android Q we want to make smart replies available to all apps right now, without you needing to do anything. Starting in Beta 3, we’re enabling system-provided smart replies and actions that are inserted directly into notifications by default.
Android Q suggestions are powered by an on-device ML service built into the platform — the same service that backs our text classifier entity recognition service. We’ve built it with user privacy in mind, and the ML processing happens completely on the device, not on a backend server.
Because suggested actions are based on the TextClassifier service, they can take advantage of new capabilities we’ve added in Android Q, such as language detection. You can also use TextClassifier APIs directly to generate system-provided notifications and actions, and you can mix those with your own replies and actions as needed.
Many users prefer apps that offer a UI with a dark theme they can switch to when light is low, to reduce eye strain and save battery. Users have also asked for a simple way to enable dark theme everywhere across their devices. Dark theme has been a popular request for a while, and in Android Q, it’s finally here.
Starting in Android Q Beta 3, users can activate a new system-wide dark theme by going to Settings > Display, using the new Quick Settings tile, or turning on Battery Saver. This changes the system UI to dark, and enables the dark theme of apps that support it. Apps can build their own dark themes, or they can opt-in to a new Force Dark feature that lets the OS create a dark version of their existing theme. All you have to do is opt-in by setting android:forceDarkAllowed="true" in your app’s current theme.
You may also want to take complete control over your app’s dark styling, which is why we’ve also been hard at work improving AppCompat’s DayNight feature. By using DayNight, apps can offer a dark theme to all of their users, regardless of what version of Android they’re using on their devices. For more information, see here.
Many of the latest Android devices feature beautiful edge-to-edge screens, and users want to take advantage of every bit of them. In Android Q we’re introducing a new fully gestural navigation mode that eliminates the navigation bar area and allows apps and games to use the full screen to deliver their content. It retains the familiar Back, Home, and recents navigation through edge swipes rather than visible buttons.
Users can switch to gestures in Settings > System > Gestures. There are currently two gestures: Swiping up from the bottom of the screen takes the user to the Home screen, holding brings up Recents. Swiping from the screen’s left or right edge triggers the Back action.
To blend seamlessly with gestural navigation, apps should go edge-to-edge, drawing behind the navigation bar to create an immersive experience. To implement this, apps should use the setSystemUiVisibility() API to be laid out fullscreen, and then handle WindowInsets as appropriate to ensure that important pieces of UI are not obscured. More information is here.
Digital wellbeing is another theme of our work on Android — we want to give users the visibility and tools to find balance with the way they use their phones. Last year we launched Digital Wellbeing with Dashboards, App Timers, Flip to Shush, and Wind Down mode. These tools are really helping. App timers helped users stick to their goals over 90% of the time, and users of Wind Down had a 27% drop in nightly usage.
This year we’re continuing to expand our features to help people find balance with digital devices, adding Focus Mode and Family Link.
Focus Mode is designed for all those times you’re working or studying, and you want to to focus to get something done. With focus mode, you can pick the apps that you think might distract you and silence them – for example, pausing email and the News while leaving maps and text message apps active. You can then use Quick Tiles to turn on Focus Mode any time you want to focus. Under the covers, these apps will be paused – until you come out of Focus Mode! Focus Mode is coming to Android 9 Pie and Android Q devices this Fall.
Family Link is a new set of controls to help parents. Starting in Android Q, Family Link will be built right into the Settings on the device. When you set up a new device for your child, Family Link will help you connect it to you. You’ll be able to set daily screen time limits, see the apps where your child is spending time, review any new apps your child wants to install, and even set a device bedtime so your child can disconnect and get to sleep. And now in Android Q you can also set time limits on specific apps… as well as give your kids Bonus Time if you want them to have just 5 more minutes at bedtime. Family Link is coming to Android P and Q devices this Fall. Make sure to check out the other great wellbeing apps in the recent Google Play awards.
Family link lets parents set device bedtime and even give bonus minutes.
We’re continuing to extend the foundations of Android with more capabilities to help you build new experiences for your users — here are just a few.
Improved peer-to-peer and internet connectivity
In Android Q we’ve refactored the Wi-Fi stack to improve privacy and performance, and also to improve common use-cases like managing IoT devices and suggesting internet connections — without requiring the location permission. The network connection APIs make it easier to manage IoT devices over local Wi-Fi, for peer-to-peer functions like configuring, downloading, or printing. Thenetwork suggestion APIs let apps surface preferred Wi-Fi networks to the user for internet connectivity.
Wi-Fi performance modes
In Android Q apps can now request adaptive Wi-Fi by enabling high performance and low latency modes. These will be of great benefit where low latency is important to the user experience, such as real-time gaming, active voice calls, and similar use-cases. The platform works with the device firmware to meet the requirement with the lowest power consumption. To use the new performance modes, call WifiManager.WifiLock.createWifiLock().
Full support for Wi-Fi RTT accurate indoor positioning
In Android 9 Pie we introduced RTT APIs for indoor positioning to accurately measure distance to nearby Wi-Fi Access Points (APs) that support the IEEE 802.11mc protocol, based on measuring the round-trip time of Wi-Fi packets. Now in Android Q, we’ve completed our implementation of the 802.11mc standard, adding an API to obtain location information of each AP being ranged, configured by their owner during installation.
Audio playback capture
You saw how Live Caption can take audio from any app and instantly turn it into on-screen captions. It’s a seamless experience that shows how powerful it can be for one app to share its audio stream with another. In Android Q, any app that plays audio can let other apps capture its audio stream using a new API. In addition to enabling captioning and subtitles, the API lets you support popular use-cases like live-streaming games, all without latency impact on the source app or game.
We’ve designed this new capability with privacy and copyright protection in mind, so the ability for an app to capture another app’s audio is constrained, giving apps full control over whether their audio streams can be captured. Read more here.
Dynamic depth for photos
Apps can now request a Dynamic Depth image which consists of a JPEG, XMP metadata related to depth related elements, and a depth and confidence map embedded in the same file on devices that advertise support. Requesting a JPEG + Dynamic Depth image makes it possible for you to offer specialized blurs and bokeh options in your app. You can even use the data to create 3D images or support AR photography use-cases. Dynamic Depth is an open format for the ecosystem — the latest version of the spec is here. We’re working with our device-maker partners to make it available across devices running Android Q and later.
With Dynamic Depth image you can offer specialized blurs and bokeh options in your app
New audio and video codecs
Android Q adds support for the open source video codec AV1, which allows media providers to stream high quality video content to Android devices using less bandwidth. In addition, Android Q supports audio encoding using Opus – a codec optimized for speech and music streaming, and HDR10+ for high dynamic range video on devices that support it. The MediaCodecInfo API introduces an easier way to determine the video rendering capabilities of an Android device. For any given codec, you can obtain a list of supported sizes and frame rates.
Vulkan 1.1 and ANGLE
We’re continuing to expand the impact of Vulkan on Android, our implementation of the low-overhead, cross-platform API for high-performance 3D graphics. We’re working together with our device manufacturer partners to make Vulkan 1.1 a requirement on all 64-bit devices running Android Q and higher, and a recommendation for all 32-bit devices. For game and graphics developers using OpenGL, we’re also working towards a standard, updateable OpenGL driver for all devices built on Vulkan. In Android Q we’re adding experimental support for ANGLE on top of Vulkan on Android devices. See the docs for details.
Neural Networks API 1.2
In NNAPI 1.2 we’ve added 60 new ops including ARGMAX, ARGMIN, quantized LSTM, alongside a range of performance optimisations. This lays the foundation for accelerating a much greater range of models — such as those for object detection and image segmentation. We are working with hardware vendors and popular machine learning frameworks such as TensorFlow to optimize and roll out support for NNAPI 1.2.
When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Now in Android Q, apps and games can use a thermal API to monitor changes on the device and take action to help restore normal temperature. For example, streaming apps can reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, or a game could reduce frame rate or polygon tesselation. Read more here.
Android Q introduces several improvements to the ART runtime to help your apps start faster, consume less memory, and run smoother — without requiring any work from you. To help with initial app startup, Google Play is now delivering cloud-based profiles along with APKs. These are anonymized, aggregate ART profiles that let ART pre-compile parts of your app even before it’s run. Cloud-based profiles benefit all apps and they’re already available to devices running Android P and higher.
We’re also adding Generational Garbage Collection to ART’s Concurrent Copying (CC) Garbage Collector. Generational CC collects young-generation objects separately, incurring much lower cost as compared to full-heap GC. It makes garbage collection more efficient in terms of time and CPU, reduces jank, and helps apps run better on lower-end devices.
More Android Q Beta devices, more Treble momentum than ever
In 2017 we launched Project Treble as part of Android Oreo, with a goal of accelerating OS updates. Treble provides a consistent, testable interface between Android and the underlying device code from device makers and silicon manufacturers, which makes porting a new OS version much simpler and more modular.
In 2018 we worked closely with our partners to bring the first OS updates to their Treble devices. The result: last year at Google I/O we had 8 devices from 7 partners joining our Android P Beta program, together with our Pixel and Pixel 2 devices. Fast forward to today — we’re seeing updates to Android Pie accelerating strongly, with 2.5 times the footprint compared to Android Oreo’s at the same time last year.
This year with Android Q we’re seeing even more momentum, and we have 23 devices from 13 top global device makers releasing Android Q Beta 3 — including all Pixel devices. We’re also providing Q Beta 3 Generic System Images (GSI), a testing environment for other supported Treble devices. All of these offer the same behaviors, APIs, and features — giving you an incredible variety of devices for testing your apps, and more ways for you to get an early look at Android Q.
To build with Android Q, download the Android Q Beta SDK and tools into Android Studio 3.3 or higher, and follow these instructions to configure your environment. If you want the latest fixes for Android Q related changes, we recommend you use Android Studio 3.5 or higher.
How do I get Beta 3?
It’s easy! Just enroll any 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.
You can also get Beta 3 on any of the other devices participating in the Android Q Beta program, from some of our top device maker partners. You can see the full list of supported partner and Pixel devices at android.com/beta. For each device you’ll find specs and links to the manufacturer’s dedicated site for downloads, support, and to report issues.
For even broader testing on supported devices, you can also get Android GSI images, and if you don’t have a device you can test on the Android Emulator — just download the latest emulator system images via the SDK Manager in Android Studio.
I’m cautiously optimistic about this model as I think niche networks can better deliver on the promise of the social internet while avoiding pitfalls like engineered addiction and emotional manipulation. (These smaller alternatives also tend to be better on the legal-techno geek issues like data privacy and effective contention moderation.)
In response to my recent post on this topic, a reader pointed me toward a fascinating long tail social media case study that I wanted to briefly share, as I think it helps underscore the potential of this movement.
In 2017, serial entrepreneur Gina Bianchini launched a new startup called Mighty Networks. Fellow net nerds might remember Bianchini from her 2007 company, Ning, which let users setup their own customized social networks. Ning was ahead of its time, as it launched in a period when most people were largely unfamiliar with social networking. Mighty Networks is trying again: but this time focused on mobile devices and pitching to an audience much more familiar with this mode of interaction.
The basic idea is that individuals use the software to setup custom social networks for their existing communities. The network operates like a fancy Facebook Group, with discussions divided into topics that you can easily browse and join. It also makes it easy to setup mastermind groups, virtual conferences, and offer courses.
The example networks I saw were focused (a couple thousand users at most), and typically charged subscription fees from the users (eliminating the need to sell ads or harvest data).
The feature, however, that really piqued my interest, and instigated this post, is the ability to find community members near you in the physical world.
To be more concrete, consider the specific Mighty Network that was originally brought to my attention: The Little Black Dress Academy — a small-size, exclusive social network for women business leaders.
If you’re a member of this network, and enjoy the discussions, you’re encouraged to use a built-in feature that lets you find women leaders who live nearby so you can setup offline get togethers. Similarly, if you’re traveling, you can find members in the city you’re visiting and setup an impromptu coffee date or dinner — injecting a jolt of extra value into the trip.
This blurring of the offline and online would never work on a mass market platform like Facebook or Twitter — could you imagine! — but on small networks, made up of paying members with pre-existing bonds, it provides a major boost to the social value the online tool generates.
This is just an isolated example, but it hints at an intriguing conclusion I’ve been interrogating in my recent work: perhaps in attempting to consolidate the social internet into a small number of massive platforms, we were accidentally stripping away much of the potential of this technology to actually make us more social.