summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorsmain@google.com <smain@google.com>2014-10-23 00:06:09 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-10-23 00:06:10 +0000
commit545049665ce3b1cd5a8da44963f849e23aca4412 (patch)
tree2a22eccdeaae3695f841184315e7100b7a7b2b1b /docs
parent13eb86a11308b2cff7159d287a79fd7cfa2b045b (diff)
parenta010375c54a459557d1aa012bf3f8f2a0abeebf0 (diff)
downloadframeworks_base-545049665ce3b1cd5a8da44963f849e23aca4412.zip
frameworks_base-545049665ce3b1cd5a8da44963f849e23aca4412.tar.gz
frameworks_base-545049665ce3b1cd5a8da44963f849e23aca4412.tar.bz2
Merge "some fixes to TV App quality and TV games doc. add section to TV Games doc about controller instructions w/ template download. clarify use of <meta-data> tag and standardize headings per Training conventions." into lmp-dev
Diffstat (limited to 'docs')
-rw-r--r--docs/html/distribute/essentials/quality/tv.jd25
-rw-r--r--docs/html/images/games/game-controller-buttons.pngbin0 -> 42107 bytes
-rw-r--r--docs/html/images/games/game-controller-buttons_2x.pngbin0 -> 69645 bytes
-rw-r--r--docs/html/training/tv/games/index.jd94
4 files changed, 75 insertions, 44 deletions
diff --git a/docs/html/distribute/essentials/quality/tv.jd b/docs/html/distribute/essentials/quality/tv.jd
index 8e17157..b13307e 100644
--- a/docs/html/distribute/essentials/quality/tv.jd
+++ b/docs/html/distribute/essentials/quality/tv.jd
@@ -234,7 +234,7 @@ page.image=/distribute/images/gp-tv-quality.png
</td>
<td>
<p style="margin-bottom:.5em;">
- App does not depend on a remote controller having a menu button to access user interface
+ App does not depend on a remote controller having a Menu button to access user interface
controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
@@ -291,8 +291,8 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- App manifest sets an intent type of {@code ACTION_MAIN} with category
- {@code CATEGORY_LEANBACK_LAUNCHER}.
+ App manifest sets an intent type of {@link android.content.Intent#ACTION_MAIN} with category
+ {@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER}.
(<a href="{@docRoot}training/tv/start/start.html#tv-activity">Learn how</a>)
</p>
</td>
@@ -321,8 +321,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- If the app requires a game controller, the app manifest sets the {@code uses-feature} setting
- {@code android.hardware.gamepad} to {@code required="true"}.
+ If the app uses a game controller as it's primary input method, it declares the appropriate
+ requirement with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
+ >{@code &lt;uses-feature>}</a> manifest tag.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Learn how</a>)
</p>
</td>
@@ -334,9 +335,9 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- If the app provides user instructions for use of game controllers, the instructions
- do not include a controller with any branding.
- (<a href="{@docRoot}training/tv/games/index.html#generic-controllers">Learn how</a>)
+ If the app provides visual instructions for using game controllers, the instructions should
+ be free of branding and show a compatible button layout.
+ (<a href="{@docRoot}training/tv/games/index.html#ControllerHelp">Learn how</a>)
</p>
</td>
</tr>
@@ -351,7 +352,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- App enables interaction with any advertising using D-pad controls.
+ App allows interaction with advertising using D-pad controls.
(<a href="{@docRoot}training/tv/start/navigation.html#d-pad-navigation">Learn how</a>)
</p>
</td>
@@ -363,7 +364,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses full-screen, non-video ads, the app allows the user to
+ For advertising that uses fullscreen, non-video ads, the app allows the user to
immediately dismiss the ad with D-pad controls.
</p>
</td>
@@ -375,7 +376,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
+ For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to a web URL.
</p>
</td>
@@ -387,7 +388,7 @@ data-sortorder="-timestamp" data-cardsizes="9x3" data-maxresults="6">
</td>
<td>
<p style="margin-bottom:.5em;">
- For advertising that uses clickable, non-full screen, non-video ads, the app does not allow
+ For advertising that uses clickable, non-fullscreen, non-video ads, the app does not allow
ads to link to another app that is not available on TV devices.
</p>
</td>
diff --git a/docs/html/images/games/game-controller-buttons.png b/docs/html/images/games/game-controller-buttons.png
new file mode 100644
index 0000000..b3e458a
--- /dev/null
+++ b/docs/html/images/games/game-controller-buttons.png
Binary files differ
diff --git a/docs/html/images/games/game-controller-buttons_2x.png b/docs/html/images/games/game-controller-buttons_2x.png
new file mode 100644
index 0000000..7a0ad0b
--- /dev/null
+++ b/docs/html/images/games/game-controller-buttons_2x.png
Binary files differ
diff --git a/docs/html/training/tv/games/index.jd b/docs/html/training/tv/games/index.jd
index 29b055b..2f510a9 100644
--- a/docs/html/training/tv/games/index.jd
+++ b/docs/html/training/tv/games/index.jd
@@ -31,7 +31,7 @@ page.article=true
</p>
-<h3 id="shared-display">Shared display</h3>
+<h3 id="shared-display">Consider the shared display</h3>
<p>
A living-room TV poses design challenges for multiplayer games, in that all players can see
@@ -57,7 +57,7 @@ page.article=true
</ul>
-<h3 id="landscape-display">Landscape display</h3>
+<h3 id="landscape-display">Support landscape display</h3>
<p>
A TV is always sideways: You can’t turn it, and there is no portrait orientation. Always design
@@ -69,19 +69,19 @@ page.article=true
<p>
TVs don't have touch interfaces, so it's even more important to get your controls right and make
- sure that players find them intuitive and fun to use. The separation of controller from device
- also introduces some other issues to pay attention to, like keeping track of multiple players'
+ sure players find them intuitive and fun to use. Handling controllers
+ also introduces some other issues to pay attention to, like keeping track of multiple
controllers, and handling disconnects gracefully.
</p>
-<h3 id="d-pad">D-pad</h3>
+<h3 id="d-pad">Support D-pad controls</h3>
<p>
Plan your control scheme around a directional pad (D-pad) control, since this control set is the
default for Android TV devices. The player needs to be able to use a D-Pad in all aspects of the
- game–not just controlling core gameplay, but also navigating menus and ads. For this reason, you
- should also ensure that your Android TV game does not refer to a touch interface: For example, an
- Android TV game should not tell a player to <strong>Tap here to skip</strong>.
+ game&mdash;not just controlling core gameplay, but also navigating menus and ads. For this reason, you
+ should also ensure that your Android TV game does not refer to a touch interface. For example, an
+ Android TV game should not tell a player to "<em>Tap</em> here to continue."
</p>
<p>
@@ -91,35 +91,35 @@ page.article=true
<ul>
<li>
- <strong>Communicate Controller Requirements up Front</strong> - Use your Play Store description
+ <strong>Communicate Controller Requirements up Front</strong>. Use your Google Play description
to communicate to the player any expectations about controllers. If a game is better suited to
a gamepad with a joystick than one with only a D-pad, make this fact clear. A player who uses
- an ill-suited controller for a game is likely to have a subpar experience–and penalize your
+ an ill-suited controller for a game is likely to have a subpar experience and penalize your
game in the ratings.
</li>
<li>
- <strong>Use Consistent Button Mapping</strong> - Intuitive and flexible button mapping is key
- to a good user experience. For example, you can adhere to accepted custom by using the A button
- to <code>Accept</code>, and the B button to <code>Cancel</code>. You can also offer flexibility
- in the form of remappability. For more information on button mapping, see <a href=
+ <strong>Use Consistent Button Mapping</strong>. Intuitive and flexible button mapping is key
+ to a good user experience. For example, you should adhere to accepted customs by using the A button
+ to <em>Accept</em>, and the B button to <em>Cancel</em>. You can also offer flexibility
+ in the form of remappability. For more information about button mapping, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling
Controller Actions</a>.
</li>
<li>
- <strong>Detect Controller Capabilities and Adjust Accordingly</strong> - Query the controller
+ <strong>Detect Controller Capabilities and Adjust Accordingly</strong>. Query the controller
about its capabilities in order to optimize the match between controller and game. For example,
you may intend for a player to steer an object by waving the controller in the air. If a
player's controller lacks accelerometer and gyroscope hardware, however, waving will not work.
- When, however, your game queries the controller and discovers that motion detection is not
- supported, it can switch over to an alternative, available control scheme. For more information
- on querying controller capabilities, see <a href=
+ So, your game should query the controller and if motion detection is not
+ supported, switch over to an alternative, available control scheme. For more information
+ about querying controller capabilities, see <a href=
"http://developer.android.com/training/game-controllers/compatibility.html">Supporting
Controllers Across Android Versions</a>.
</li>
</ul>
-<h3 id="back-button">Back-button behavior</h3>
+<h3 id="back-button">Provide appropriate Back-button behavior</h3>
<p>
The Back button should never act as a toggle. For example, do not use it to both open and close a
@@ -139,18 +139,18 @@ page.article=true
</p>
-<h3 id="multiple-controllers">Handling multiple controllers</h3>
+<h3 id="multiple-controllers">Handle multiple controllers</h3>
<p>
When multiple players are playing a game, each with his or her own controller, it is important to
- map each player-controller pair. For information on how to implement controller-number
+ map each player-controller pair. For information about how to implement controller-number
identification, see <a href=
"http://developer.android.com/reference/android/view/InputDevice.html#getControllerNumber">Input
Devices</a>.
</p>
-<h3 id="handle-disconnect">Handling disconnects</h3>
+<h3 id="handle-disconnect">Handle controller disconnects</h3>
<p>
When a controller is disconnected in the middle of gameplay, the game should pause, and a dialog
@@ -159,7 +159,7 @@ page.article=true
<p>
The dialog should also offer troubleshooting tips (for example, a pop-up dialog telling the
- player to "Check your Bluetooth connection"). For more information on implementing input-device
+ player to "Check your Bluetooth connection"). For more information about implementing input-device
support, see <a href=
"http://developer.android.com/training/game-controllers/controller-input.html">Handling Controller
Actions</a>. Specific information about Bluetooth connections is at <a href=
@@ -167,25 +167,53 @@ page.article=true
</p>
+<h3 id="ControllerHelp">Show controller instructions</h3>
+
+<p>If your game provides visual game control instructions, the
+controller image should be free of branding and include only <a
+href="{@docRoot}training/game-controllers/controller-input.html#button"
+>buttons compatible with Android</a>.</p>
+
+<p>For sample images of an Android-compatible controller, download the
+<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
+>Android TV Gamepad Template (ZIP)</a>.
+It includes a white controller on black background and a black controller on white background
+(shown in figure 1), as a PNG file and an Adobe&reg; Illustrator&reg; file.</p>
+
+<img src="{@docRoot}images/games/game-controller-buttons_2x.png" width="700"
+ srcset="{@docRoot}images/games/game-controller-buttons_2x.png 2x,
+ {@docRoot}images/games/game-controller-buttons.png 1x" />
+<p class="img-caption"><b>Figure 1.</b> Example controller instructions using the
+<a href="http://storage.googleapis.com/androiddevelopers/design/android_tv_gamepad_template-2014-10.zip"
+>Android TV Gamepad Template (ZIP)</a>.
+
+
+
+
<h2 id="manifest">Manifest</h2>
+<p>There are a some special things games should include in the Android manifest.</p>
+
+<h3 id="Launcher">Show your game in the launcher</h3>
<p>
- The Android TV launcher home screen displays games in a separate row from regular apps. The TV
- framework uses the <code>android:isGame</code> manifest attribute to differentiate games from
- non-game apps. Set this value to <code>true</code> in your game's app manifest, as shown in the
- following code example:
+ The Android TV launcher home screen displays games in a separate row from regular apps.
+ To make your game appear in the list of games, add the
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"
+ ><code>&lt;meta-data></code></a> tag in your app manifest with <code>android:name</code>
+ set to <code>"isGame"</code> and <code>android:value</code>
+ set to <code>"true"</code>. For example:
</p>
<pre class="fragment">
&lt;application&gt;
...
- &lt; meta-data android:name="isGame" android:value="true" &gt;
+ &lt;meta-data android:name="isGame" android:value="true" &gt;
...
&lt;/application&gt;
</pre>
-<h3 id="gamepad">Game Controllers</h3>
+<h3 id="gamepad">Declare support for game controllers</h3>
<p>
Games controllers may not be available or active for users of a TV device. In order to properly
@@ -215,7 +243,9 @@ page.article=true
<h2 id="gpgs">Google Play Game Services</h2>
<p>
- If your game integrates Google Play Game Services, you should keep in mind a number of
+ If your game integrates <a
+ href="https://developers.google.com/games/services/">Google Play Game services</a>,
+ you should keep in mind a number of
considerations pertaining to achievements, sign-in, saving games, and multiplayer play.
</p>
@@ -224,7 +254,7 @@ page.article=true
<p>
Your game should include at least five (earnable) achievements. Only a user controlling gameplay
- from a supported input device should be able to earn achievements. For more information on
+ from a supported input device should be able to earn achievements. For more information about
achievements and how to implement them, see <a href=
"https://developers.google.com/games/services/android/achievements">Achievements in Android</a>.
</p>
@@ -262,7 +292,7 @@ page.article=true
<p>
A game offering a multiplayer experience must allow at least two players to enter a room. For
- further information on multiplayer games in Android, see the <a href=
+ further information about multiplayer games in Android, see the <a href=
"https://developers.google.com/games/services/android/realtimeMultiplayer">Real-time
Multiplayer</a> and <a href="">Turn-based Multiplayer</a> documentation on the Android developer
site.