Woke up to a dead phone this morning, because my smartphone did something really dumb.
Update, March 20: This article was updated with quotes offering more detailed explanations.
A few nights ago I was away from home and didn't have my power cord with me, so I had to rely on a battery backup to charge my USB C-based phone for the night. This battery had been stuffed down in the bottom of my backpack for a few days, after having been used to power something else for several hours, so it didn't have a lot of juice left to begin with. If I had to guess, there was just about enough to get my phone to about 70%, which was more than enough to get me to a power outlet the next morning.
I plugged in my phone, confirmed it had charged to 10% before I closed my eyes, and didn't think about it again until the morning. When I woke up late because my alarm didn't go off, I realized it was because my phone was dead. What's worse, my battery backup actually had more power in it than it did before I'd plugged it in to my phone.
My phone and was dead and my battery pack was recharged — the opposite of what I wanted!
What happened here sounds bizarre, but it's actually all of the individual pieces of this charging system working as designed. The battery backup charged my phone until it was drained, and then started pulling power back from the phone because it was drained. USB-C is designed to allow simple power sharing, so anything can charge anything else. In theory it's amazing, and has seriously come in handy when I needed 20 more minutes of juice on my Chromebook for work and only had a phone nearby. In this situation, though, it didn't work out the way I wanted it to.
@russellholly This. Definitely need proper control so I can choose which way to power, or not. My Chromebook also charges my power bank!— Jonathan Morris📱📸 (@jmcomms) March 17, 2017
This isn't a failing on any one particular phone manufacturer, OS, or battery backup designer, either. This is, largely, how USB-C was designed to function when these things were made. Some handle this worse than others; for example, many Anker USB-C batteries have the Type-C port set to draw power by default, with a key press required in order to reverse direction, but in general this is a small problem lacking a standard solution for all devices. And the solution, at least to my specific problem, probably lies in software.
In my opinion, our phones shouldn't be allowed to give power to other things without our express permission. In much the same way that Android offers USB selection modes for file sharing that require a manual selection from me, power management should offer a similar option. That way, if my phone is sharing power with something, it's no accident and doesn't interrupt the ability to use the phone. This is something Google would need to implement at the OS level, but it seems like the best possible solution for this kind of problem.
But it's not as simple as all that, as I learned after publishing this. Google's public-facing USB-C rockstar, Benson Leung, schooled me a little over on Google+.
The battery pack, if it was implemented with USB Power Delivery and is connected to a USB-PD phone like the Pixel, could identify that the other party is a dual-role device with a small battery like a phone and not a fixed power source like a wall charger and hold-off on draining from the phone.
If i were to design the pack, i'd allow the battery pack to just draw enough power to boot itself up until it can recognize the other device is a dual-role device without its own external power source using PD, and then stop charging. That way neither phone or the battery pack charge.
We could make the phone behave in the way you want... such that it only ever acts as a power sink until you explicitly ask to turn on power source and host mode, but that would mean that if you wanted to plug in a USB thumb drive, or a USB accessory like, oh I don't know... USB-C digital headphones, they WOULDN'T work unless you explicitly change some setting first. You'd not even get any notification when you plugged in your USB-C headset because the port is fixed in sink-only mode, and it needs to supply power to the headset before the OS can even identify it as a headset.
It may be a fringe issue in the grand scheme of things, and with any luck this USB-PD feature will become a global standard over time. Unfortunately, that's not going to happen overnight, and in the mean time there are a huge number of these battery packs being sold on a regular basis. Even if you spend the extra cash to grab a battery pack with USB-PD enabled, if you already have a phone with a Type C port and it doesn't support USB-PD you'll need to upgrade before this all works like it should.
Frankly, we're beyond the point of shrugging off Type C related concerns as "early adopter" problems. It'd be nice for Google to take the lead on addressing this issue beyond strongly recommending the use of USB-PD in its documentation, instead of waiting for another big company to implement USB-C and show everyone how it's done.