A couple of days ago, Google fulfilled its obligation to prevent me from sleeping by releasing a stack of newly updated apps for me to examine. Some of them were pretty straight forward, like the latest version of Android Device Manager, and others turned out to be pretty mind-boggling. That's how the YouTube update turned out. The apk grew by 2 MB, and Google certainly packed in quite a bit, but many of the additions don't make much sense. To be fair, we've already seen Google isn't opposed to throwing in a few pranks of its own, but most of the new code and resources are too elaborate for a simple joke.

Teardown

Before we get to the tricky parts, let's start with a couple of things that actually look like clearly defined features.

Jump To Scene

As the Internet's most used video streaming service, YouTube has seen several evolutions since its humble beginnings. One of its more subtle weak points is exposed when users try to skip around on longer videos. It's possible, and very long videos even get a micro-bar for a more precise jump, but it's still not ideal for something like full length movies. It looks like YouTube is preparing to support scenes, sometimes referred to as chapters or bookmarks, where a user will be able to skip directly to a segment of a video defined by the creator. The evidence is still pretty light, but there is a layout named jump_to_scene.xml and some code to back it up. While incomplete, it probably won't take much to have this finished. (Seriously, take a look at message boards to see just how much people have been clamoring for this.)

Note: Just to be clear, Google has long suggested methods for simulating chapters with the use of time codes and a custom interface, but that doesn't work very smoothly in something like the YouTube app for Android. We're talking about native support for scenes.

Stats For Nerds

Attentive YouTube aficionados -particularly those with their own channels- already know this one by name; but regulars might have never noticed it. Stats for Nerds is one of the lesser used features available near the bottom of the context menu that opens up an overlay with a few handy bits of information about the video you're currently watching. It's not something most people will need to look at, but it can be useful in some circumstances.

2014-08-08_05h56_35

2014-08-08_05h58_15

The evidence is pretty clear, as there's a layout named default_nerd_stats_overlay.xml and code to make use of it. There's also a toggle to enable the overlay, but it's only available in developer mode (sorry, that's just for Google developers). No evidence exists to suggest that this feature is coming to regular users, but there's also no reason to think it won't eventually become available. We'll just have to wait and see on this one.

<string name="pref_developer_nerd_stats_enabled">Enable stats for nerds</string>

Warp

Now we're getting into the stuff that can't be readily explained. In fact, we're probably getting a view of one of YouTube's next big features.

After looking through all of the new resources, there are several instances of something called "warp." A few of the strings make it clear that Warp is some kind of system to support peer-to-peer sharing of videos without an active Internet connection. Think of it as SneakerNet for YouTube.

AndroidManifest.xml

<service android:enabled="true" android:exported="false" android:isolatedProcess="false" android:name="com.google.android.apps.warp.WarpService"/>

strings.xml

<string name="activity_quarkstore_contents_label">Warp Data</string>
<string name="activity_sharing_fail">Pairing failed. Try again.</string>
<string name="activity_sharing_timeout">The other phone did not respond. Try again.</string>
<string name="activity_warning_message">Warp is experiencing bluetooth difficulties. Consider restarting bluetooth.</string>
<string name="activity_dismiss">Dismiss</string>
<string name="activity_go_to_bluetooth_settings">Go to Bluetooth Settings</string>
<string name="activity_direct_share_hold_phones_together">Hold your phones close together...</string>
<string name="activity_direct_share_opening_connection">Opening %s connection...</string>
<string name="activity_direct_share_listening_for_connection">Listening for connection...</string>
<string name="activity_direct_share_got_connection">Got %s connection!</string>
<string name="activity_direct_share_warbling">Warbling credentials...</string>
<string name="activity_direct_share_warble_sent">Warble sent!</string>
<string name="activity_direct_share_listening_for_warble">Listening for warble...</string>
<string name="activity_direct_share_received_warble">Received warble!</string>
<string name="activity_direct_share_already_in_progress">A share is already in progress. Wait for it to finish and try again.</string>
<string name="activity_direct_share_user_canceled">Share canceled : you changed the phone position.</string>
<string name="activity_direct_share_no_items_to_share">Nothing to share.</string>
<string name="activity_direct_share_bt_enable_failed">Unable to turn on bluetooth. Enable bluetooth in Settings and try again.</string>
<string name="sending_video_has_started">Transferring video</string>
<string name="sending_video_success">Video sent</string>
<string name="receiving_video_has_started">Video transferring</string>
<string name="toast_bluetooth_is_off">Warp is offline. Sync will not occur while Bluetooth is disabled. Turn Bluetooth on for Warp to sync.</string>
<string name="toast_warning_no_audio">The phone is mute. Turn up the volume and try again.</string>
<string name="toast_warning_no_bluetooth">Bluetooth is off. Turn on Bluetooth and try again.</string>
<string name="notification_new_content">Got new content!</string>
<string name="notification_new_content_detail">New content received over Warp</string>
<string name="notification_direct_share">Establishing connection...</string>
<string name="notification_direct_share_detail">Establishing connection for video transfer</string>
<string name="notification_direct_share_received">Direct share received!</string>
<string name="notification_direct_share_received_detail">Item saved to Downloads</string>
<string name="gagdet_direct_share_button_description">Direct Share Button</string>
<string name="gagdet_settings_button_description">Settings Button</string>
<string name="menu_receive_offline">Receive Offline (Warp)</string>
<string name="share_offline_label">Share Offline (Warp)</string>
<string name="offline_transfer_tutorial_text">Share this video without using the Internet. Just drop any offline video into another device.</string>
<string name="warp_receive_success"><b>%1$s</b> has been transferred.</string>

Based on the strings, it's obvious that Warp relies on Bluetooth to get things rolling, but Wi-Fi is used for the actual movement of data. That makes sense given the slow transfer rate of Bluetooth. However, Warp doesn't use an existing Wi-Fi network, but instead attempts to use Wi-Fi Direct if it's supported by both devices. If Wi-Fi Direct isn't an option, it appears to fall back to creating a Wi-Fi access point (a.k.a. Hotspot) for the other device to connect. There aren't many strings to explain this, but it stands out in the code.

strings.xml

<string name="preference_ap_result_title">Wifi AP support</string>
<string name="preference_ap_result_supported">Supported</string>
<string name="preference_ap_result_not_supported">Not supported</string>

these are some of the hardcoded strings that are a bit more clear:

Device can use hotspot!

Device cannot use hotspot

Conclusion, hotspot is available:

Now that we've got some idea of what can happen, there's also a video embedded in the apk that helps to create a picture of how it's used... sorta.

That's not particularly helpful, but it validates the explanation that Warp is used to share videos directly between devices. If you really want a mind-bender, it's worth pointing out that Warp actually does access the accelerometer and might even identify the physical relationship between two devices. Perhaps the physical act of holding your phone over another one really is involved, even if it seems overly theatrical.

taken from code:

public static final com.google.research.airbender.flip.FlipState BOTTOM;
public static final com.google.research.airbender.flip.FlipState OTHER;
public static final com.google.research.airbender.flip.FlipState TOP;

As an aside, this comes from a newly added "Research" folder. Inside of it is airbender, and inside of that are folders for flip and whispernet. In addition to seeing that Flip accesses the accelerometer, WhisperNet does something with the microphone. Otherwise, it's not really clear what these projects are intended to do. Still, it's interesting that they may be evolutions of earlier experiments. Who knows, maybe there will be some semi-magical tricks involved.

So far, Warp just seems like a file transfer mechanism for offline content from YouTube. But now we get into the really strange stuff. Warp will have user-supplied limits for how much can be transferred or stored. This is probably meant to prevent a sneaky person from flooding your limited storage space with a bunch of garbage.

<string name="adv_total_storage_limit_title">Storage limit</string>
<string name="adv_total_storage_limit_summary">Stop receiving data when Warp storage exceeds</string>
<string name="adv_total_storage_limit_default">1 GB</string>
<string name="adv_daily_transfer_limit_title">Daily transfer limit</string>
<string name="adv_daily_transfer_limit_summary">Stop using Warp for the day after receiving</string>
<string name="adv_daily_transfer_limit_default">500 MB</string>
<string name="adv_filesize_limit_title">Maximum file size</string>
<string name="adv_filesize_limit_summary">"Don't share files bigger than"</string>
<string name="adv_filesize_limit_default">10 MB</string>

Lest we assume Warp is just a feature of YouTube, things are about to get more interesting. Warp is a separate app. Oh, and it might also be a type of app. Confused yet?

The strings below can't make it any more clear. There is a distinct app called "Warp" that can be installed and uninstalled, and there will also be "Warp-enabled apps" that can talk through it. The best explanation is that this arrangement might be akin to Chromecast and Google Cast-enabled apps, but it's difficult to make a connection to anything related to offline sharing.

<string name="app_name">Warp</string>
<string name="permission_connect_to_warp_apps_label">Connect to Warp apps</string>
<string name="permission_connect_to_warp_apps_description">Warp connects to Warp-enabled apps to share their data with other devices.</string>

<string name="toast_bluetooth_not_supported">Bluetooth is not supported on your device. Warp will not be able to share data. Consider uninstalling Warp.</string>
<string name="toast_networks_not_supported">Bluetooth and Wifi are not supported on your device. Warp will not be able to share data. Consider uninstalling Warp.</string>

It looks like there will be some kind of ID attached to either the user or the device. There's not enough information to be sure if this will be auto-generated or filled in by the user, or how it will be used. Maybe it's a unique ID for tracking purposes.

<string name="preference_warp_id">My Warp ID</string>

There were also two other mystery strings. Your guess is as good as mine...

<string name="gadgetLocationX">warp.setting.gadgetLocationX</string>
<string name="gadgetLocationY">warp.setting.gadgetLocationY</string>

To wrap it up, these are the icons that are definitely used by Warp.

notification_icons

There are also two more that can't be directly connected to Warp, but they seem to be closely related. The Play install icon would probably link to the Warp app in the Play Store. The preferences icon resembles some kind of broadcast or radio waves, which seems to be a fairly unique feature of Warp. It's likely to lead to a settings screen.

icons2

Warble

If you were reading the strings closely in the section on Warp, you may have caught another interesting name: Warble. There's not a lot to look at, but warbles seem to be some type of content that can be sent via Warp. Beyond that, there are a few other strings that give a tiny bit of context:

<string-array name="warble_options">
- <item>@string/warble_option_whispernet</item>
- <item>@string/warble_option_audible</item>
- <item>@string/warble_option_ultrasonic</item>
</string-array>

<string name="warble_option_whispernet">WhisperNet</string>
<string name="warble_option_audible">Audible</string>
<string name="warble_option_ultrasonic">Ultrasonic</string>
<string name="preference_audible_warble_key">warble_mode_preference_key</string>
<string name="preference_warble_option_title">Warble Mode</string>
<string name="preference_audible_warble_title">Audible warble</string>

Clearly, there are three modes for Warbles: WhisperNet, Audible, and Ultrasonic. Are these product names, transmission modes, or something else? Perhaps one of those modes is related to the ultrasonic pairing feature used by Chromecast, or it might be an extension of that technology for another purpose. Your guess is as good as mine.

Leakercats, Unite!

Ok, this isn't a new feature, it's just another hardcoded string we stumbled across. But it's too good to leave out of this teardown!

"This is INTERNAL ONLY!\nHelp to stop leakercats by not sharing outside of Google."

Is somebody making a crack about naughty Google employees that share apks with the outside world, or is this an adorable nickname for us? We'd appreciate it if the next YouTube apk could shed a little light on this, please. ;)

For now, we shall wear the Leakercats badge with honor.

Wrap-Up

That's about it for this teardown. There's obviously something big on the horizon, but it's just too tough to tell exactly what it is. I've got a few guesses, as I'm sure many readers do, as well. I can't wait to see what's in store for us!