Play Books just hit version 4 yesterday, but on the surface it looks like very little has changed. There are a couple of relatively small tweaks here and there, but it wouldn't appear to deserve a big version jump. However, this is the version that will launch audiobook support. A teardown shows that there's a ton of new functionality hiding below the surface and it's all just waiting for Google to flip the switch.

What's New

Unofficial Changelog: (the stuff we found)

  • Changes to the table of contents page

TOC and current page marker

Left: v3.16. Right: v4.0.

Before we get to the good part, there is one small cosmetic change to point out. If you're reading through a book, tap on the center of the page to bring up the controls and hit the Contents button at the top. This will take you to a screen with a table of contents, plus tabs for your bookmarks and chapters.

As the screenshots above show, the layout of the page has changed in a few ways. Topping the page is a new line for the cover art of the book, its title, and the author. Chapter titles used to be styled in italics, but the slant has been removed. But the most significant change to the layout is the relocation of page numbers, which no longer live on a right-aligned column, but have moved to a second line below the chapter title, and are now prefixed by the word 'page.'

There's also a highlighted line for your current page. In old versions, this was always a separate line from the chapters, but the latest update removes the dedicated line and instead uses the current chapter title. It's still highlighted like the old style, but now the lower line for the page number specifies that it's the current page and the page number for the chapter has been replaced with your current place in the book.

Teardown

Disclaimer: Teardowns are based on evidence found inside of apks (Android's application package) and are necessarily speculative and usually based on incomplete information. It's possible that the guesses made here are totally and completely wrong. Even when predictions are correct, there is always a chance that plans could change or may be canceled entirely. Much like rumors, nothing is certain until it's officially announced and released.

The features discussed below are probably not live yet, or may only be live for a small percentage of users. Unless stated otherwise, don't expect to see these features if you install the apk.

Audiobooks are coming

<string name="splash_title">Shop ebooks, audiobooks, comics, and more</string>
<string name="splash_body">Read or listen to your favorite books on your phone, tablet, or laptop</string>

Thanks to a teardown of the Play Store, we've known for a few months that Google had audiobooks on the horizon. With a close look at Play Books, version 4.0 has a huge amount of new text relating to audiobooks, playback, casting, and more. There's a lot here, so I'll try to hit each point quickly.

Audiobooks and ebooks are going to be split into separate tabs, which makes perfect sense given that they're consumed in completely different ways.

<string name="ebooks_tab_label">Ebooks</string>
<string name="orsonbooks_tab_label">Audiobooks</string>

<string name="orson_book_a11y">Audio book</string>

Just like regular ebooks, it looks like the Play Store will make sample chapters available for audiobooks. Once you reach the end of a sample, the app will let you know that the next chapter must be purchased to continue listening.

<string name="toc_buy_header_audiobook">This chapter will be available after you buy the audiobook</string>
<string name="toc_buy_header_ebook">This chapter will be available after you buy the book</string>

<string name="audiobook_search_result_owned_fallback_subtitle">audiobook in your library</string>
<string name="audiobook_search_result_owned_subtitle">%1$s • audiobook in your library</string>

Real chapter titles

Google is highlighting the point that Play Books will use real chapter titles for the audiobooks instead of a series of meaningless track numbers.

<string name="toc_real_chapters_edu_persistent">Features real chapter titles</string>
<string name="toc_real_chapters_edu_title">No more track numbers</string>
<string name="toc_real_chapters_edu_body">This audiobook uses real chapter titles so you can easily find your place</string>
<string name="toc_real_chapters_info_icon">About real chapter titles</string>

Playback

Naturally, all of the standard playback controls are available. You'll have the standard Play/Pause button, fast forward, and rewind. There is a scrubber bar, so you'll be able to quickly move to a specific time. There's no mention of a skip button for jumping between chapters, but I assume you'll be able to do that from a table of contents. Playback time is shown in a few formats depending on the context and how much space is available.

strings
<string name="read_now_play">Play</string>
<string name="read_now_read">Read</string>
<string name="orson_pause">Pause</string>
<string name="orson_play">Play</string>
<string name="accessibility_rewind">Rewind</string>
<string name="accessibility_fast_forward">Fast forward</string>
<string name="orson_playbar_a11y">Play bar</string>
<string name="orson_remaining_time_short">-%s</string>

<string name="orson_duration_less_than_a_minute">less than one minute</string>
<string name="orson_icu_duration_hours_minutes">{hours, plural, =0 {} =1 {1 hour } other {{hours} hours } }{minutes, plural, =1 {1 minute} other {{minutes} minutes} }</string>
<string name="orson_icu_duration_hrs_mins">{hours, plural, =0 {} =1 {1 hr } other {{hours} hrs } }{minutes, plural, =1 {1 min} other {{minutes} mins} }</string>
<string name="orson_icu_remaining_hrs_mins">{hours, plural, =0 {} =1 {1 hr } other {{hours} hrs } }{minutes, plural, =1 {1 min} other {{minutes} mins} } left</string>
<string name="orson_progress">%1$s complete • %2$s</string>
<string name="orson_progress_time_a11y">%s completed</string>
<string name="orson_remaining_time_a11y">%s left</string>
<string name="orson_scrubber_summary_a11y">%1$s of %2$s</string>

<string name="orson_remaining_time_eob_message">book finished</string>

<string name="orson_chapter_start">Chapter start</string>
<string name="orson_chapter_end">Chapter end</string>

<string name="orson_title_and_author" formatted="false">%s • %s</string>
<string name="orson_error_open_generic">Couldn't play the audiobook</string>
<string name="orson_error_open_generic_with_title">Couldn't play %s</string>
<string name="orson_loading_label">Loading</string>

Playback speed

For many listeners, playback speed is a critical feature for audiobooks (and podcasts, /cough), and that hasn't been ignored here. Play Books will default to 1x, but you'll be able to adjust it up or down to fit your preference. I'm not sure what the caps are set to.

strings
<string name="orson_speed_menu_title">Playback speed</string>
<string name="orson_speed_desc">Adjust playback speed, current speed is %1$d times</string>
<string name="orson_speed_default">1×<annotation id="color"> (Default)</annotation></string>
<string name="orson_speed_float">%1$1.2f×</string>
<string name="orson_speed">%1$d×</string>
<string name="orson_speed_desc_float">Adjust playback speed, current speed is %1$1.2f times</string>

Position tracking and sync

Another important feature for audiobooks is keeping your current position, or more to the point, syncing it with a server. Play Books will keep your position so you won't lose your place if something happens to your phone. Not only that, but if you're using more than one device to play an audiobook, you'll be told if the device you're currently listening to is ahead of or behind another device and get the option to jump to the place where that device left off. This is particularly useful if you use your current phone for listening during a commute, but then switch to listening on a tablet or an old phone when you get home.

strings
<string name="orson_position_conflict_local_versus_server_server_ahead_date_msg">Looks like another device is %1$s ahead of your current position, recorded on %2$s. Do you want to skip ahead and continue listening from there?</string>
<string name="orson_position_conflict_local_versus_server_server_ahead_msg">Looks like another device is %1$s ahead of your current position, recorded %2$s ago. Do you want to skip ahead and continue listening from there?</string>
<string name="orson_position_conflict_local_versus_server_server_behind_date_msg">Looks like another device is %1$s behind your current position, recorded on %2$s. Do you want to go back and continue listening from there?</string>
<string name="orson_position_conflict_local_versus_server_server_behind_msg">Looks like another device is %1$s behind your current position, recorded %2$s ago. Do you want to go back and continue listening from there?</string>

Casting

It should come as no surprise that Play Books will also support Google's casting feature, so you'll be able to send audio to a speaker, television, or headphones for listening around the house. Note, most of the lines related to casting are included by a standard library, so there may be some text here that won't actually be used in the app.

strings
<string name="cast_casting_to_device">Casting to %1$s</string>
<string name="media_route_menu_title">Play on…</string>
<string name="note_casting_device_info_subtext">Now playing on %s</string>
<string name="cast_connecting_to_device">Connecting to %1$s</string>
<string name="cast_disconnect">Disconnect</string>
<string name="accessibility_stop_casting">Stop Casting</string>
<string name="cast_expanded_controller_ad_image_description">Image displayed while the cast receiver is playing an ad</string>
<string name="cast_expanded_controller_ad_in_progress">Ad in progress…</string>
<string name="cast_expanded_controller_background_image">Album art</string>
<string name="cast_expanded_controller_live_stream_indicator">Live stream</string>
<string name="cast_expanded_controller_loading">Loading…</string>
<string name="cast_expanded_controller_skip_ad_label">Skip</string>
<string name="cast_forward">Forward</string>
<string name="cast_forward_10">Forward ten seconds</string>
<string name="cast_forward_30">Forward thirty seconds</string>
<string name="cast_intro_overlay_button_text">@android:string/ok</string>
<string name="cast_invalid_stream_duration_text">--:--</string>
<string name="cast_invalid_stream_position_text">--:--</string>
<string name="cast_closed_captions">Closed captions</string>
<string name="cast_closed_captions_unavailable">Closed captions unavailable</string>
<string name="cast_ad_label">Ad</string>
<string name="cast_mute">Mute</string>
<string name="cast_unmute">Unmute</string>
<string name="cast_pause">Pause</string>
<string name="cast_play">Play</string>
<string name="cast_rewind">Rewind</string>
<string name="cast_rewind_10">Rewind ten seconds</string>
<string name="cast_rewind_30">Rewind thirty seconds</string>
<string name="cast_seek_bar">Playback seek control</string>
<string name="cast_skip_next">Skip to next item</string>
<string name="cast_skip_prev">Skip to previous item</string>
<string name="cast_stop">Stop</string>
<string name="cast_stop_live_stream">Stop live stream</string>
<string name="cast_tracks_chooser_dialog_audio">Audio</string>
<string name="cast_tracks_chooser_dialog_cancel">Cancel</string>
<string name="cast_tracks_chooser_dialog_closed_captions">Closed Captions</string>
<string name="cast_tracks_chooser_dialog_default_track_name">Track %1$d</string>
<string name="cast_tracks_chooser_dialog_none">None</string>
<string name="cast_tracks_chooser_dialog_ok">OK</string>
<string name="cast_tracks_chooser_dialog_subtitles">Subtitles</string>
<string name="cast_notification_connected_message">Connected to %1$s</string>
<string name="cast_notification_connecting_message">Connecting to %1$s</string>
<string name="cast_notification_disconnect">Disconnect</string>

<string name="mr_button_content_description">Cast button</string>
<string name="mr_cast_button_connected">Cast button. Connected</string>
<string name="mr_cast_button_connecting">Cast button. Connecting</string>
<string name="mr_cast_button_disconnected">Cast button. Disconnected</string>
<string name="mr_chooser_searching">Finding devices</string>
<string name="mr_chooser_title">Cast to</string>
<string name="mr_controller_album_art">Album art</string>
<string name="mr_controller_casting_screen">Casting screen</string>
<string name="mr_controller_close_description">Close</string>
<string name="mr_controller_collapse_group">Collapse</string>
<string name="mr_controller_disconnect">Disconnect</string>
<string name="mr_controller_expand_group">Expand</string>
<string name="mr_controller_no_info_available">No info available</string>
<string name="mr_controller_no_media_selected">No media selected</string>
<string name="mr_controller_pause">Pause</string>
<string name="mr_controller_play">Play</string>
<string name="mr_controller_stop">Stop</string>
<string name="mr_controller_stop_casting">Stop casting</string>
<string name="mr_controller_volume_slider">Volume slider</string>
<string name="mr_system_route_name">System</string>
<string name="mr_user_route_category_name">Devices</string>

Sleep timer

If you're using audiobooks to help you get to sleep at night, you probably don't want to continue playing a book for hours after you're out cold. A standard sleep timer will be available so you can drift off safe in the knowledge that your phone won't be burning battery for the next 7-9 hours.

The timer can be set to turn off after 15 minutes, 30 minutes, 60 minutes, or when the current chapter is finished. One catch appears to be that the sleep timer doesn't work if you're casting, so that's something to consider.

strings
<string name="accessibility_sleep_timer">Sleep Timer</string>
<string name="sleep_timer_15_minutes">15 minutes</string>
<string name="sleep_timer_30_minutes">30 minutes</string>
<string name="sleep_timer_60_minutes">60 minutes</string>
<string name="sleep_timer_end_of_chapter">End of chapter</string>
<string name="sleep_timer_off">Sleep Timer off</string>

<string name="cast_sleep_timer_chooser_message">We currently don't support sleep timers while casting. Continuing will disable any sleep timers you have set.</string>
<string name="cast_sleep_timer_chooser_no">Never mind</string>
<string name="cast_sleep_timer_chooser_title">You have a sleep timer set</string>
<string name="cast_sleep_timer_chooser_yes">Continue</string>

Android Auto

Probably the single best environment for an audiobook is when you're stuck in a car for the next 5 hours on the drive through the middle of nowhere. Fortunately, this situation will be covered, as well. Play Books has Android Auto support with this version. In fact, you can update to v4 right now and plug it into a car with Auto to see Play Books in the list of audio sources.

Unfortunately, if you actually select Play Books, you're going to get a warning message that it isn't supported on Android Auto. That's obviously going to change after audiobooks launch.

Considering the sheer amount of additions and the Android Auto support is technically already visible, it's pretty safe to say that audiobooks are going to launch eminently. I'd be surprised if the announcement wasn't made in the first half of next week.

New notification channel

Play Books already has notification channels, but the title for a Miscellaneous channel was added in this update. This channel isn't live yet, at least not for me, but I assume it probably will be fairly soon. I'm sure most people don't care about this, but if there are people meticulously managing each notification, this information might be useful to them.

<string name="gcm_fallback_notification_channel_label">Miscellaneous</string>

Download

The APK is signed by Google and upgrades your existing app. The cryptographic signature guarantees that the file is safe to install and was not tampered with in any way. Rather than wait for Google to push this download to your devices, which can take days, download and install it just like any other APK.

Version: 4.0.39.182255461 4.0.41.182460020

Google Play Books
Google Play Books
Developer: Google LLC
Price: Free