summaryrefslogtreecommitdiffstats
path: root/docs/html/guide
diff options
context:
space:
mode:
authorRobert Ly <robertly@google.com>2012-11-14 13:26:28 -0800
committerRobert Ly <robertly@google.com>2012-11-27 16:09:58 -0800
commit6519ca0c5f8748e49b629ab482b4c8c3882adccb (patch)
treeda94d939b1c5f76c618fd2c617938991d89c0b6c /docs/html/guide
parentabb4a7008a1f5eab6cfaf7e9dd4779e549c21714 (diff)
downloadframeworks_base-6519ca0c5f8748e49b629ab482b4c8c3882adccb.zip
frameworks_base-6519ca0c5f8748e49b629ab482b4c8c3882adccb.tar.gz
frameworks_base-6519ca0c5f8748e49b629ab482b4c8c3882adccb.tar.bz2
docs: add new GMS landing and reference
Change-Id: I48c75dd5924bdf297b5368887084d148efcd66ba
Diffstat (limited to 'docs/html/guide')
-rw-r--r--docs/html/guide/google/gcm/adv.jd272
-rw-r--r--docs/html/guide/google/gcm/c2dm.jd119
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/allclasses-frame.html37
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/allclasses-noframe.html37
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBaseIntentService.html497
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBroadcastReceiver.html282
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMConstants.html674
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMRegistrar.html543
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-frame.html38
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-summary.html167
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-tree.html150
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/constant-values.html332
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/default.css4160
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/deprecated-list.html142
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/help-doc.html209
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/index-all.html354
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/index.html36
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/overview-tree.html152
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/package-list1
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/resources/inherit.gifbin57 -> 0 bytes
-rw-r--r--docs/html/guide/google/gcm/client-javadoc/stylesheet.css29
-rw-r--r--docs/html/guide/google/gcm/demo.jd264
-rw-r--r--docs/html/guide/google/gcm/gcm.jd1040
-rw-r--r--docs/html/guide/google/gcm/gs.jd221
-rw-r--r--docs/html/guide/google/gcm/index.jd28
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html43
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html43
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html807
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html310
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html337
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html369
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html397
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html322
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html664
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html53
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html187
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html156
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/constant-values.html368
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/default.css4160
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/deprecated-list.html142
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/help-doc.html209
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/index-all.html438
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/index.html36
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/overview-tree.html158
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/package-list1
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/resources/inherit.gifbin57 -> 0 bytes
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/serialized-form.html355
-rw-r--r--docs/html/guide/google/gcm/server-javadoc/stylesheet.css29
-rw-r--r--docs/html/guide/google/index.jd134
-rw-r--r--docs/html/guide/google/play/billing/billing_about.html12
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_admin.jd530
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_best_practices.jd111
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_integrate.jd1100
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_overview.jd508
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_reference.jd489
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_subscriptions.jd913
-rwxr-xr-xdocs/html/guide/google/play/billing/billing_testing.jd293
-rwxr-xr-xdocs/html/guide/google/play/billing/index.jd114
-rw-r--r--docs/html/guide/google/play/expansion-files.jd1271
-rw-r--r--docs/html/guide/google/play/filters.jd454
-rw-r--r--docs/html/guide/google/play/licensing/adding-licensing.jd1071
-rw-r--r--docs/html/guide/google/play/licensing/index.jd61
-rw-r--r--docs/html/guide/google/play/licensing/licensing-reference.jd439
-rw-r--r--docs/html/guide/google/play/licensing/overview.jd246
-rw-r--r--docs/html/guide/google/play/licensing/setting-up.jd701
-rw-r--r--docs/html/guide/google/play/publishing/multiple-apks.jd685
-rw-r--r--docs/html/guide/google/play/services.jd25
-rw-r--r--docs/html/guide/guide_toc.cs96
68 files changed, 0 insertions, 28621 deletions
diff --git a/docs/html/guide/google/gcm/adv.jd b/docs/html/guide/google/gcm/adv.jd
deleted file mode 100644
index 1360624..0000000
--- a/docs/html/guide/google/gcm/adv.jd
+++ /dev/null
@@ -1,272 +0,0 @@
-page.title=GCM Advanced Topics
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Learn more about GCM advanced features.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#lifetime">Lifetime of a Message</a></li>
-<li><a href="#throttling">Throttling</a></li>
-<li><a href="#reg-state">Keeping the Registration State in Sync</a>
- <ol>
- <li><a href="#canonical">Canonical IDs</a></li>
- </ol>
-</li>
-<li><a href="#retry">Automatic Retry Using Exponential Back-Off</a></li>
-<li><a href="#unreg">How Unregistration Works</a></li>
-<li><a href="#collapsible">Send-to-Sync vs. Messages with Payload</a>
- <ol>
- <li><a href="#s2s">Send-to-sync messages</a></li>
- <li><a href="#payload">Messages with payload</a></li>
-<li><a href="#which">Which should I use?</a></li>
- </ol>
-</li>
-<li><a href="#ttl">Setting an Expiration Date for a Message</a> </li>
-<li><a href="#throttling"></a><a href="#multi-senders">Receiving Messages from Multiple Senders</a></li>
-</ol>
-
-</div>
-</div>
-<p>This document covers advanced topics for GCM.</p>
-
-
-
-
-<h2 id="msg-lifetime">Lifetime of a Message</h2>
-<p>When a 3rd-party server posts a message to GCM and receives a message ID back, it does not mean that the message was already delivered to the device. Rather, it means that it was accepted for delivery. What happens to the message after it is accepted depends on many factors.</p>
-<p>In the best-case scenario, if the device is connected to GCM, the screen is on, and there are no throttling restrictions (see <a href="#throttling">Throttling</a>), the message will be delivered right away.</p>
-<p>If the device is connected but idle, the message will still be
-delivered right away unless the <code>delay_while_idle</code> flag is set to true. Otherwise, it will be stored in the GCM servers until the device is awake. And that's where the <code>collapse_key</code> flag plays a role: if there is already a message with the same collapse key (and registration ID) stored and waiting for delivery, the old message will be discarded and the new message will take its place (that is, the old message will be collapsed by the new one). However, if the collapse key is not set, both the new and old messages are stored for future delivery.</p>
-
-<p class="note"><strong>Note:</strong> There is a limit on how many messages can be stored without collapsing. That limit is currently 100. If the limit is reached, all stored messages are discarded. Then when the device is back online, it receives a special message indicating that the limit was reached. The application can then handle the situation properly, typically by requesting a full sync.</p>
-
-<p>If the device is not connected to GCM, the message will be stored until a connection is established (again respecting the collapse key rules). When a connection is established, GCM will deliver all pending messages to the device, regardless of the <code>delay_while_idle</code> flag. If the device never gets connected again (for instance, if it was factory reset), the message will eventually time out and be discarded from GCM storage. The default timeout is 4 weeks, unless the <code>time_to_live</code> flag is set.</p>
-
-<p>Finally, when GCM attempts to deliver a message to the device and the application was uninstalled, GCM will discard that message right away and invalidate the registration ID. Future attempts to send a message to that device will get a <code>NotRegistered</code> error. See <a href="#unreg">How Unregistration Works</a> for more information.</p>
-<p>Although is not possible to track the status of each individual message, the Google APIs Console stats are broken down by messages sent to device, messages collapsed, and messages waiting for delivery.</p>
-
-<h2 id="throttling">Throttling</h2>
-<p>To prevent abuse (such as sending a flood of messages to a device) and
-to optimize for the overall network efficiency and battery life of
-devices, GCM implements throttling of messages using a token bucket
-scheme. Messages are throttled on a per application and per <a href="#collapsible">collapse
-key</a> basis (including non-collapsible messages). Each application
-collapse key is granted some initial tokens, and new tokens are granted
-periodically therefter. Each token is valid for a single message sent to
-the device. If an application collapse key exhausts its supply of
-available tokens, new messages are buffered in a pending queue until
-new tokens become available at the time of the periodic grant. Thus
-throttling in between periodic grant intervals may add to the latency
-of message delivery for an application collapse key that sends a large
-number of messages within a short period of time. Messages in the pending
-queue of an application collapse key may be delivered before the time
-of the next periodic grant, if they are piggybacked with messages
-belonging to a non-throttled category by GCM for network and battery
-efficiency reasons.</p>
-
-<h2 id="reg-state">Keeping the Registration State in Sync</h2>
-<p>Whenever the application receives a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with a <code>registration_id</code> extra, it should save the ID for future use, pass it to the 3rd-party server to complete the registration, and keep track of whether the server completed the registration. If the server fails to complete the registration, it should try again or unregister from GCM.</p>
-<p>There are also two other scenarios that require special care:</p>
-<ul>
- <li>Application update</li>
- <li>Backup and restore
- </li>
-</ul>
-<p>When an application is updated, it should invalidate its existing registration ID, as it is not guaranteed to work with the new version. Because there is no lifecycle method called when the application is updated, the best way to achieve this validation is by storing the current application version when a registration ID is stored. Then when the application is started, compare the stored value with the current application version. If they do not match, invalidate the stored data and start the registration process again.</p>
-
-<p>Similarly, you should not save the registration ID when an application is backed up. This is because the registration ID could become invalid by the time the application is restored, which would put the application in an invalid state (that is, the application thinks it is registered, but the server and GCM do not store that registration ID anymore&mdash;thus the application will not get more messages).</p>
-<h3 id="canonical">Canonical IDs</h3>
-<p>On the server side, as long as the application is behaving well, everything should work normally. However, if a bug in the application triggers multiple registrations for the same device, it can be hard to reconcile state and you might end up with duplicate messages.</p>
-<p>GCM provides a facility called &quot;canonical registration IDs&quot; to easily recover from these situations. A canonical registration ID is defined to be the ID of the last registration requested by your application. This is the ID that the server should use when sending messages to the device.</p>
-<p>If later on you try to send a message using a different registration ID, GCM will process the request as usual, but it will include the canonical registration ID in the <code>registration_id</code> field of the response. Make sure to replace the registration ID stored in your server with this canonical ID, as eventually the ID you're using will stop working.</p>
-
-<h2 id="retry">Automatic Retry Using Exponential Back-Off</h2>
-
-<p>When the application receives a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with the <code>error</code> extra set as <code>SERVICE_NOT_AVAILABLE</code>, it should retry the failed operation (register or unregister).</p>
-<p>In the simplest case, if your application just calls <code>register</code> and GCM is not a fundamental part of the application, the application could simply ignore the error and try to register again the next time it starts. Otherwise, it should retry the previous operation using exponential back-off. In exponential back-off, each time there is a failure, it should wait twice the previous amount of time before trying again. If the register (or unregister) operation was synchronous, it could be retried in a simple loop. However, since it is asynchronous, the best approach is to schedule a pending intent to retry the operation. The following steps describe how to implement this in the <code>MyIntentService</code> example used above:</p>
-<ol>
- <li> Create a random token to verify the origin of the retry intent:
-
-<pre class="prettyprint pretty-java">private static final String TOKEN =
- Long.toBinaryString(new Random().nextLong());
-</pre>
-
- <li> Change the <code>handleRegistration()</code> method so it creates the pending intent when appropriate:</li>
-
-<pre class="prettyprint pretty-java">...
-if (error != null) {
- if ("SERVICE_NOT_AVAILABLE".equals(error)) {
- long backoffTimeMs = // get back-off time from shared preferences
- long nextAttempt = SystemClock.elapsedRealtime() + backoffTimeMs;
- Intent retryIntent = new Intent("com.example.gcm.intent.RETRY");
- retryIntent.putExtra("token", TOKEN);
- PendingIntent retryPendingIntent =
- PendingIntent.getBroadcast(context, 0, retryIntent, 0);
- AlarmManager am = (AlarmManager)
- context.getSystemService(Context.ALARM_SERVICE);
- am.set(AlarmManager.ELAPSED_REALTIME, nextAttempt, retryPendingIntent);
- backoffTimeMs *= 2; // Next retry should wait longer.
- // update back-off time on shared preferences
- } else {
- // Unrecoverable error, log it
- Log.i(TAG, "Received error: " + error);
-}
-...</pre>
-<p> The back-off time is stored in a shared preference. This ensures that it is persistent across multiple activity launches. The name of the intent does not matter, as long as the same intent is used in the following steps.</p></li>
-
- <li> Change the <code>onHandleIntent()</code> method adding an <code>else if</code> case for the retry intent:</li>
-
-<pre class="prettyprint pretty-java">...
-} else if (action.equals("com.example.gcm.intent.RETRY")) {
- String token = intent.getStringExtra("token");
- // make sure intent was generated by this class, not by a malicious app
- if (TOKEN.equals(token)) {
- String registrationId = // get from shared properties
- if (registrationId != null) {
- // last operation was attempt to unregister; send UNREGISTER intent again
- } else {
- // last operation was attempt to register; send REGISTER intent again
- }
-}
-...</pre>
-
- <li> Create a new instance of <code>MyReceiver</code> in your activity:</li>
-
-<pre class="prettyprint pretty-java">private final MyBroadcastReceiver mRetryReceiver = new MyBroadcastReceiver();
-</pre>
-
- <li>In the activity's <code>onCreate()</code> method, register the new instance to receive the <code>com.example.gcm.intent.RETRY</code> intent:
- <pre class="prettyprint pretty-java">...
-IntentFilter filter = new IntentFilter(&quot;com.example.gcm.intent.RETRY&quot;);
-filter.addCategory(getPackageName());
-registerReceiver(mRetryReceiver, filter);
-...</pre>
-
-<p class="note"><strong>Note:</strong> You must dynamically create a new instance of the broadcast receiver since the one defined by the manifest can only receive intents with the <code>com.google.android.c2dm.permission.SEND</code> permission. The permission <code>com.google.android.c2dm.permission.SEND</code> is a system permission and as such it cannot be granted to a regular application.</p>
-
-</li>
-
- <li>In the activity's <code>onDestroy()</code> method, unregister the broadcast receiver:</li>
-
-<pre class="prettyprint pretty-java">unregisterReceiver(mRetryReceiver);</pre>
-</ol>
-<h2 id="unreg">How Unregistration Works</h2>
-<p>There are two ways to unregister a device from GCM: manually and automatically.</p>
-<p>An Android application can manually unregister itself by issuing a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, which is useful when the application offers a logoff feature (so it can unregister on logoff and register again on logon). See the <a href="gcm.html#unregistering">Architectural Overview</a> for more discussion of this topic. This is the sequence of events when an application unregisters itself:</p>
-<ol>
- <li> The application issues a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, passing the package name as an extra.</li>
- <li>When the GCM server is done with the unregistration, it sends a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with the <code>unregistered</code> extra set.</li>
- <li>The application then must contact the 3rd-party server so it can remove the registration ID.</li>
- <li>The application should also clear its registration ID.
- </li>
-</ol>
-<p>An application can be automatically unregistered after it is uninstalled from the device. However, this process does not happens right away, as Android does not provide an uninstall callback. What happens in this scenario is as follows:</p>
-<ol>
- <li>The end user uninstalls the application.</li>
- <li>The 3rd-party server sends a message to GCM server.</li>
- <li>The GCM server sends the message to the device.</li>
- <li>The GCM client receives the message and queries Package Manager about whether there are broadcast receivers configured to receive it, which returns <code>false</code>.
-</li>
- <li>The GCM client informs the GCM server that the application was uninstalled.</li>
- <li>The GCM server marks the registration ID for deletion.</li>
- <li>The 3rd-party server sends a message to GCM.</li>
- <li>The GCM returns a <code>NotRegistered</code> error message to the 3rd-party server.</li>
- <li>The 3rd-party deletes the registration ID.
- </li>
-</ol>
-
-<p class ="note"><strong>Note:</strong> The GCM client is the Google Cloud Messaging framework present on the device.</p>
-
-<p>Note that it might take a while for the registration ID be completely removed from GCM. Thus it is possible that messages sent during step 7 above gets a valid message ID as response, even though the message will not be delivered to the device. Eventually, the registration ID will be removed and the server will get a <code>NotRegistered</code> error, without any further action being required from the 3rd-party server (this scenario happens frequently while an application is being developed and tested).</p>
-
-<h2 id="collapsible">Send-to-Sync vs. Messages with Payload</h2>
-
-<p>Every message sent in GCM has the following characteristics:</p>
-<ul>
- <li>It has a payload limit of 4096 bytes.</li>
- <li>By default, it is stored by GCM for 4 weeks.</li>
-</ul>
-
-<p>But despite these similarities, messages can behave very differently depending on their particular settings. One major distinction between messages is whether they are collapsed (where each new message replaces the preceding message) or not collapsed (where each individual message is delivered). Every message sent in GCM is either a &quot;send-to-sync&quot; (collapsible) message or a &quot;message with payload&quot; (non-collapsible message). These concepts are described in more detail in the following sections.</p>
-
-<h3 id="s2s"><strong>Send-to-sync messages</strong></h3>
-
-<p>A send-to-sync (collapsible) message is often a &quot;tickle&quot; that tells a mobile application to sync data from the server. For example, suppose you have an email application. When a user receives new email on the server, the server pings the mobile application with a &quot;New mail&quot; message. This tells the application to sync to the server to pick up the new email. The server might send this message multiple times as new mail continues to accumulate, before the application has had a chance to sync. But if the user has received 25 new emails, there's no need to preserve every &quot;New mail&quot; message. One is sufficient. Another example would be a sports application that updates users with the latest score. Only the most recent message is relevant, so it makes sense to have each new message replace the preceding message. </p>
-
-<p>The email and sports applications are cases where you would probably use the GCM <code>collapse_key</code> parameter. A <em>collapse key</em> is an arbitrary string that is used to collapse a group of like messages when the device is offline, so that only the most recent message gets sent to the client. For example, &quot;New mail,&quot; &quot;Updates available,&quot; and so on</p>
-<p>GCM allows a maximum of 4 different collapse keys to be used by the GCM server at any given time. In other words, the GCM server can simultaneously store 4 different send-to-sync messages, each with a different collapse key. If you exceed this number GCM will only keep 4 collapse keys, with no guarantees about which ones they will be.</p>
-
-<h3 id="payload">Messages with payload</h3>
-<p>Unlike a send-to-sync message, every &quot;message with payload&quot; (non-collapsible message) is delivered. The payload the message contains can be up to 4kb. For example, here is a JSON-formatted message in an IM application in which spectators are discussing a sporting event:</p>
-
-<pre class="prettyprint pretty-json">{
- "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
- "data" : {
- "Nick" : "Mario",
- "Text" : "great match!",
- "Room" : "PortugalVSDenmark",
- },
-}</pre>
-
-<p>A &quot;message with payload&quot; is not simply a &quot;ping&quot; to the mobile application to contact the server to fetch data. In the aforementioned IM application, for example, you would want to deliver every message, because every message has different content. To specify a non-collapsible message, you simply omit the <code>collapse_key</code> parameter. Thus GCM will send each message individually. Note that the order of delivery is not guaranteed.</p>
-<p>GCM will store up to 100 non-collapsible messages. After that, all messages are discarded from GCM, and a new message is created that tells the client how far behind it is. The message is delivered through a regular <code>com.google.android.c2dm.intent.RECEIVE</code> intent, with the following extras:</p>
-<ul>
- <li> <code>message_type</code>&mdash;The value is always the string &quot;deleted_messages&quot;.</li>
- <li><code>total_deleted</code>&mdash;The value is a string with the number of deleted messages.</li>
-</ul>
-<p>The application should respond by syncing with the server to recover the discarded messages. </p>
-
-<h3 id="which">Which should I use?</h3>
- <p>If your application does not need to use non-collapsible messages, collapsible messages are a better choice from a performance standpoint, because they put less of a burden on the device battery.</p>
-
-<h2 dir="ltr" id="ttl">Setting an Expiration Date for a Message</h2>
-<p>The Time to Live (TTL) feature lets the sender specify the maximum lifespan of a message using the <code>time_to_live</code> parameter in the send request. The value of this parameter must be a duration from 0 to 2,419,200 seconds, and it corresponds to the maximum period of time for which GCM will store and try to deliver the message. Requests that don't contain this field default to the maximum period of 4 weeks.</p>
-<p>Here are some possible uses for this feature:</p>
-<ul>
- <li>Video chat incoming calls</li>
- <li>Expiring invitation events</li>
- <li>Calendar events</li>
-</ul>
-<h3 id="bg">Background </h3>
-<p>GCM will usually deliver messages immediately after they are sent. However, this might not always be possible. For example, the device could be turned off, offline, or otherwise unavailable. In other cases, the sender itself might request that messages not be delivered until the device becomes active by using the <code>delay_while_idle</code> flag. Finally, GCM might intentionally delay messages to prevent an application from consuming excessive resources and negatively impacting battery life.</p>
-<p>When this happens, GCM will store the message and deliver it as soon as it's feasible. While this is fine in most cases, there are some applications for which a late message might as well never be delivered. For example, if the message is an incoming call or video chat notification, it will only be meaningful for a small period of time before the call is terminated. Or if the message is an invitation to an event, it will be useless if received after the event has ended.</p>
-<p>Another advantage of specifying the expiration date for a message is that GCM will never throttle messages with a <code>time_to_live</code> value of 0 seconds. In other words, GCM will guarantee best effort for messages that must be delivered &quot;now or never.&quot; Keep in mind that a <code>time_to_live</code> value of 0 means messages that can't be delivered immediately will be discarded. However, because such messages are never stored, this provides the best latency for sending notifications.</p>
-<p>Here is an example of a JSON-formatted request that includes TTL:</p>
-<pre class="prettyprint pretty-json">
-{
- "collapse_key" : "demo",
- "delay_while_idle" : true,
- "registration_ids" : ["xyz"],
- "data" : {
- "key1" : "value1",
- "key2" : "value2",
- },
- "time_to_live" : 3
-},
-</pre>
-
-
-<h2 id="multi-senders">Receiving Messages from Multiple Senders</h2>
-<p>GCM allows multiple parties to send messages to the same application. For example, suppose your application is an articles aggregator with multiple contributors, and you want each of them to be able to send a message when they publish a new article. This message might contain a URL so that the application can download the article. Instead of having to centralize all sending activity in one location, GCM gives you the ability to let each of these contributors send its own messages.</p>
-<p>To make this possible, all you need to do is have each sender generate its own project number. Then include those IDs in the sender field, separated by commas, when requesting a registration. Finally, share the registration ID with your partners, and they'll be able to send messages to your application using their own authentication keys.</p>
-<p>This code snippet illustrates this feature. Senders are passed as an intent extra in a comma-separated list:</p>
-<pre class="prettyprint pretty-java">Intent intent = new Intent(GCMConstants.INTENT_TO_GCM_REGISTRATION);
-intent.setPackage(GSF_PACKAGE);
-intent.putExtra(GCMConstants.EXTRA_APPLICATION_PENDING_INTENT,
- PendingIntent.getBroadcast(context, 0, new Intent(), 0));
-String senderIds = &quot;968350041068,652183961211&quot;;
-intent.putExtra(GCMConstants.EXTRA_SENDER, senderIds);
-ontext.startService(intent);
- </pre>
-
-<p>Note that there is limit of 100 multiple senders.</p>
-
diff --git a/docs/html/guide/google/gcm/c2dm.jd b/docs/html/guide/google/gcm/c2dm.jd
deleted file mode 100644
index e80a41f..0000000
--- a/docs/html/guide/google/gcm/c2dm.jd
+++ /dev/null
@@ -1,119 +0,0 @@
-page.title=Migration
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Understand the differences between GCM and C2DM.</li>
-<li>Learn how to migrate an app from C2DM to GCM.</li>
-
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#history">Historical Overview</a></li>
-<li><a href="#diffs">How is GCM Different from C2DM?</a>
- <ol>
- <li><a href="#interop">Relationship between C2DM and GCM</a></li>
- </ol>
-</li>
-<li><a href="#migrating">Migrating Your Apps</a>
- <ol>
- <li><a href="#client">Client changes</a></li>
- <li><a href="#server">Server changes</a></li>
- </ol>
-</li>
-</ol>
-
-</div>
-</div>
-
-<p>Android Cloud to Device Messaging (C2DM) is deprecated. The C2DM service will continue to be maintained in the short term, but C2DM will accept no new users, and it will grant no new quotas. <strong>C2DM developers are strongly encouraged to move to Google Cloud Messaging (GCM)</strong>. GCM is the next generation of C2DM.</p>
-<p>This document is addressed to C2DM developers who are moving to GCM. It describes the differences between GCM and C2DM, and explains how to migrate existing C2DM apps to GCM.</p>
-
-
-<h2 id="history">Historical Overview</h2>
-<p>C2DM was launched in 2010 to help Android apps send data from servers to their applications. Servers can tell apps to contact the server directly, to fetch updated application or user data. The C2DM service handles all aspects of queueing of messages and delivery to the target application running on the target device.</p>
-<p>GCM replaces C2DM. The focus of GCM is as follows:</p>
-<ul>
- <li> Ease of use. No sign-up forms.</li>
- <li>No quotas.</li>
- <li>GCM and C2DM stats are available through the <a href="http://play.google.com/apps/publish">Android Developer Console</a>.</li>
- <li>Battery efficiency.</li>
- <li>Rich set of new APIs.</li>
-</ul>
-<h2 id="diffs">How is GCM Different from C2DM?</h2>
-<p>GCM builds on the core foundation of C2DM. Here is what's different:</p>
-
-<dl>
-<dt><strong>Simple API Key</strong></dt>
-<dd>To use the GCM service, you need to obtain a Simple API Key from Google APIs console page. For more information, see <a href="gs.html">Getting Started</a>. Note that GCM <em>only</em> accepts Simple API Key&mdash;using ClientLogin or OAuth2 tokens will not work.
-</dd>
-<dt><strong>Sender ID</strong></dt>
-<dd>In C2DM, the Sender ID is an email address. In GCM, the Sender ID is a project number that you acquire from the API console, as described in <a href="gs.html#create-proj">Getting Started</a>. </dd>
-
-<dt><strong>JSON format</strong></dt>
-<dd>GCM HTTP requests support JSON format in addition to plain text. For more information, see the <a href="gcm.html#send-msg">Architectural Overview</a>.</dd>
-
-<dt><strong>Multicast messages</strong></dt>
-<dd>In GCM you can send the same message to multiple devices simultaneously. For example, a sports app wanting to deliver a score update to fans can now send the message to up to 1000 registration IDs in the same request (requires JSON). For more information, see the <a href="gcm.html#send-msg">Architectural Overview</a>.</dd>
-
-<dt><strong>Multiple senders</strong></dt>
-<dd>Multiple parties can send messages to the same app with one common registration ID. For more information, see <a href="adv.html#multi-senders">Advanced Topics</a>.</dd>
-
-<dt><strong>Time-to-live messages</strong></dt>
-<dd>Apps like video chat and calendar apps can send expiring invitation events with a time-to-live value between 0 and 4 weeks. GCM will store the messages until they expire. A message with a time-to-live value of 0 will not be stored on the GCM server, nor will it be throttled. For more information, see <a href="adv.html#ttl">Advanced Topics</a>.</dd>
-
-<dt><strong>Messages with payload</strong></dt>
-<dd>Apps can use &quot;messages with payload&quot; to deliver messages of up to 4 Kb. This would be useful in a chat application, for example. To use this feature, simply omit the <code>collapse_key</code> parameter and messages will not be collapsed. GCM will store up to 100 messages. If you exceed that number, all messages will be discarded but you will receive a special message. If an application receives this message, it needs to sync with the server. For more information, see <a href="adv.html#collapsible">Advanced Topics</a>.</dd>
-
-<dt><strong>Canonical registration ID</strong></dt>
-<dd>There may be situations where the server ends up with 2 registration IDs for the same device. If the GCM response contains a registration ID, simply replace the registration ID you have with the one provided. With this feature your application doesn't need to send the device ID to your server anymore. For more information, see <a href="adv.html#canonical">Advanced Topics</a>.</dd>
-</dl>
-<p>GCM also provides helper libraries (<a href="{@docRoot}guide/google/gcm/client-javadoc/index.html">client</a> and <a href="{@docRoot}guide/google/gcm/server-javadoc/index.html">server</a>) to make writing your code easier.</p>
-
-<h3 id="interop">Relationship between C2DM and GCM</h3>
-
-<p>C2DM and GCM are not interoperable. For example, you cannot post notifications from GCM to C2DM registration IDs, nor can you use C2DM registration IDs as GCM registration IDs. From your server-side application, you must keep keep track of whether a registration ID is from C2DM or GCM and use the proper endpoint. </p>
-
-<p>As you transition from C2DM to GCM, your server needs to be aware of whether a given registration ID
-contains an old C2DM sender or a new GCM project number. This is the approach we recommend: have the new app version (the one that uses GCM) send a bit along with the registration ID. This bit tells your server that this registration ID is for GCM. If you don't get the extra bit, you mark the registration ID as C2DM. Once no more valid registration IDs are marked as C2DM, you can complete the migration.</p>
-
-<h2 id="migrating">Migrating Your Apps</h2>
-<p>This section describes how to move existing C2DM apps to GCM.</p>
-<h3 id="client">Client changes</h3>
-<p>Migration is simple! The only change required in the application is replacing the email account passed in the sender parameter of the registration intent with the project number generated when signing up for the new service. For example:</p>
-<pre class="prettyprint pretty-java">Intent registrationIntent = new Intent(&quot;com.google.android.c2dm.intent.REGISTER&quot;);
-// sets the app name in the intent
-registrationIntent.putExtra(&quot;app&quot;, PendingIntent.getBroadcast(this, 0, new Intent(), 0));
-registrationIntent.putExtra(&quot;sender&quot;, senderID);
-startService(registrationIntent);</pre>
-<p>After receiving a response from GCM, the registration ID obtained must be sent to the application server. When doing this, the application should indicate that it is sending a GCM registration ID so that the server can distinguish it from existing C2DM registrations.</p>
-<h3 id="server">Server changes</h3>
-<p>When the application server receives a GCM registration ID, it should store it and mark it as such.</p>
-<p>Sending messages to GCM devices requires a few changes:</p>
-<ul>
- <li> The request should be sent to a new endpoint: <code>https://android.googleapis.com/gcm/send</code>.</li>
- <li>The Authorization header of the request should contain the API key generated during sign up. This key replaces the deprecated ClientLogin Auth token.</li>
-</ul>
-<p>For example:
-</p>
-<pre>Content-Type:application/json
-Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA
-
-{
- "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
- "data" : {
- "Team" : "Portugal",
- "Score" : "3",
- "Player" : "Varela",
- },
-}</pre>
-<p>For a detailed discussion of this topic and more examples, see the <a href="gcm.html#send-msg">Architectural Overview</a>.</p>
-<p>Eventually, once enough users of your application have migrated to the new service, you might want to take advantage of the new <a href="gcm.html#send-msg">JSON-formatted</a> requests that give access to the full set of features provided by GCM.</p>
-
diff --git a/docs/html/guide/google/gcm/client-javadoc/allclasses-frame.html b/docs/html/guide/google/gcm/client-javadoc/allclasses-frame.html
deleted file mode 100644
index e1bed36..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/allclasses-frame.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-All Classes
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm" target="classFrame">GCMBaseIntentService</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm" target="classFrame">GCMBroadcastReceiver</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm" target="classFrame">GCMConstants</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm" target="classFrame">GCMRegistrar</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/allclasses-noframe.html b/docs/html/guide/google/gcm/client-javadoc/allclasses-noframe.html
deleted file mode 100644
index dc34021..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/allclasses-noframe.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-All Classes
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm">GCMBroadcastReceiver</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<BR>
-<A HREF="com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBaseIntentService.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBaseIntentService.html
deleted file mode 100644
index ff15218..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBaseIntentService.html
+++ /dev/null
@@ -1,497 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-GCMBaseIntentService
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GCMBaseIntentService";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMBaseIntentService.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMBaseIntentService.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm</FONT>
-<BR>
-Class GCMBaseIntentService</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by ">IntentService
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.GCMBaseIntentService</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public abstract class <B>GCMBaseIntentService</B><DT>extends IntentService</DL>
-</PRE>
-
-<P>
-Skeleton for application-specific <CODE>IntentService</CODE>s responsible for
- handling communication from Google Cloud Messaging service.
- <p>
- The abstract methods in this class are called from its worker thread, and
- hence should run in a limited amount of time. If they execute long
- operations, they should spawn new threads, otherwise the worker thread will
- be blocked.
- <p>
- Subclasses must provide a public no-arg constructor.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#TAG">TAG</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#GCMBaseIntentService()">GCMBaseIntentService</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor that does not set a sender id, useful when the sender id
- is context-specific.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected </CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#GCMBaseIntentService(java.lang.String...)">GCMBaseIntentService</A></B>(java.lang.String...&nbsp;senderIds)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor used when the sender id(s) is fixed.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.lang.String[]</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#getSenderIds(Context)">getSenderIds</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the sender ids.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onDeletedMessages(Context, int)">onDeletedMessages</A></B>(Context&nbsp;context,
- int&nbsp;total)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called when the GCM server tells pending messages have been deleted
- because the device was idle.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onError(Context, java.lang.String)">onError</A></B>(Context&nbsp;context,
- java.lang.String&nbsp;errorId)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called on registration or unregistration error.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onHandleIntent(Intent)">onHandleIntent</A></B>(Intent&nbsp;intent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onMessage(Context, Intent)">onMessage</A></B>(Context&nbsp;context,
- Intent&nbsp;intent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called when a cloud message has been received.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onRecoverableError(Context, java.lang.String)">onRecoverableError</A></B>(Context&nbsp;context,
- java.lang.String&nbsp;errorId)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called on a registration error that could be retried.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onRegistered(Context, java.lang.String)">onRegistered</A></B>(Context&nbsp;context,
- java.lang.String&nbsp;registrationId)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called after a device has been registered.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected abstract &nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onUnregistered(Context, java.lang.String)">onUnregistered</A></B>(Context&nbsp;context,
- java.lang.String&nbsp;registrationId)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Called after a device has been unregistered.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="TAG"><!-- --></A><H3>
-TAG</H3>
-<PRE>
-public static final java.lang.String <B>TAG</B></PRE>
-<DL>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMBaseIntentService.TAG">Constant Field Values</A></DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="GCMBaseIntentService()"><!-- --></A><H3>
-GCMBaseIntentService</H3>
-<PRE>
-protected <B>GCMBaseIntentService</B>()</PRE>
-<DL>
-<DD>Constructor that does not set a sender id, useful when the sender id
- is context-specific.
- <p>
- When using this constructor, the subclass <strong>must</strong>
- override <A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#getSenderIds(Context)"><CODE>getSenderIds(Context)</CODE></A>, otherwise methods such as
- <A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html#onHandleIntent(Intent)"><CODE>onHandleIntent(Intent)</CODE></A> will throw an
- <CODE>IllegalStateException</CODE> on runtime.
-<P>
-</DL>
-<HR>
-
-<A NAME="GCMBaseIntentService(java.lang.String...)"><!-- --></A><H3>
-GCMBaseIntentService</H3>
-<PRE>
-protected <B>GCMBaseIntentService</B>(java.lang.String...&nbsp;senderIds)</PRE>
-<DL>
-<DD>Constructor used when the sender id(s) is fixed.
-<P>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getSenderIds(Context)"><!-- --></A><H3>
-getSenderIds</H3>
-<PRE>
-protected java.lang.String[] <B>getSenderIds</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Gets the sender ids.
-
- <p>By default, it returns the sender ids passed in the constructor, but
- it could be overridden to provide a dynamic sender id.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalStateException</CODE> - if sender id was not set on constructor.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onMessage(Context, Intent)"><!-- --></A><H3>
-onMessage</H3>
-<PRE>
-protected abstract void <B>onMessage</B>(Context&nbsp;context,
- Intent&nbsp;intent)</PRE>
-<DL>
-<DD>Called when a cloud message has been received.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application's context.<DD><CODE>intent</CODE> - intent containing the message payload as extras.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onDeletedMessages(Context, int)"><!-- --></A><H3>
-onDeletedMessages</H3>
-<PRE>
-protected void <B>onDeletedMessages</B>(Context&nbsp;context,
- int&nbsp;total)</PRE>
-<DL>
-<DD>Called when the GCM server tells pending messages have been deleted
- because the device was idle.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application's context.<DD><CODE>total</CODE> - total number of collapsed messages</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onRecoverableError(Context, java.lang.String)"><!-- --></A><H3>
-onRecoverableError</H3>
-<PRE>
-protected boolean <B>onRecoverableError</B>(Context&nbsp;context,
- java.lang.String&nbsp;errorId)</PRE>
-<DL>
-<DD>Called on a registration error that could be retried.
-
- <p>By default, it does nothing and returns true, but could be
- overridden to change that behavior and/or display the error.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application's context.<DD><CODE>errorId</CODE> - error id returned by the GCM service.
-<DT><B>Returns:</B><DD>if true, failed operation will be retried (using
- exponential backoff).</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onError(Context, java.lang.String)"><!-- --></A><H3>
-onError</H3>
-<PRE>
-protected abstract void <B>onError</B>(Context&nbsp;context,
- java.lang.String&nbsp;errorId)</PRE>
-<DL>
-<DD>Called on registration or unregistration error.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application's context.<DD><CODE>errorId</CODE> - error id returned by the GCM service.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onRegistered(Context, java.lang.String)"><!-- --></A><H3>
-onRegistered</H3>
-<PRE>
-protected abstract void <B>onRegistered</B>(Context&nbsp;context,
- java.lang.String&nbsp;registrationId)</PRE>
-<DL>
-<DD>Called after a device has been registered.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application's context.<DD><CODE>registrationId</CODE> - the registration id returned by the GCM service.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onUnregistered(Context, java.lang.String)"><!-- --></A><H3>
-onUnregistered</H3>
-<PRE>
-protected abstract void <B>onUnregistered</B>(Context&nbsp;context,
- java.lang.String&nbsp;registrationId)</PRE>
-<DL>
-<DD>Called after a device has been unregistered.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>registrationId</CODE> - the registration id that was previously registered.<DD><CODE>context</CODE> - application's context.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onHandleIntent(Intent)"><!-- --></A><H3>
-onHandleIntent</H3>
-<PRE>
-public final void <B>onHandleIntent</B>(Intent&nbsp;intent)</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMBaseIntentService.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMBaseIntentService.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBroadcastReceiver.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBroadcastReceiver.html
deleted file mode 100644
index ae80bf7..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBroadcastReceiver.html
+++ /dev/null
@@ -1,282 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-GCMBroadcastReceiver
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GCMBroadcastReceiver";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMBroadcastReceiver.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMBroadcastReceiver.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm</FONT>
-<BR>
-Class GCMBroadcastReceiver</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by ">BroadcastReceiver
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.GCMBroadcastReceiver</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>GCMBroadcastReceiver</B><DT>extends BroadcastReceiver</DL>
-</PRE>
-
-<P>
-<CODE>BroadcastReceiver</CODE> that receives GCM messages and delivers them to
- an application-specific <A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><CODE>GCMBaseIntentService</CODE></A> subclass.
- <p>
- By default, the <A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><CODE>GCMBaseIntentService</CODE></A> class belongs to the application
- main package and is named
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#DEFAULT_INTENT_SERVICE_CLASS_NAME"><CODE>GCMConstants.DEFAULT_INTENT_SERVICE_CLASS_NAME</CODE></A>. To use a new class,
- the <A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html#getGCMIntentServiceClassName(Context)"><CODE>getGCMIntentServiceClassName(Context)</CODE></A> must be overridden.
-<P>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html#GCMBroadcastReceiver()">GCMBroadcastReceiver</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html#getGCMIntentServiceClassName(Context)">getGCMIntentServiceClassName</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the class name of the intent service that will handle GCM messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html#onReceive(Context, Intent)">onReceive</A></B>(Context&nbsp;context,
- Intent&nbsp;intent)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="GCMBroadcastReceiver()"><!-- --></A><H3>
-GCMBroadcastReceiver</H3>
-<PRE>
-public <B>GCMBroadcastReceiver</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="onReceive(Context, Intent)"><!-- --></A><H3>
-onReceive</H3>
-<PRE>
-public final void <B>onReceive</B>(Context&nbsp;context,
- Intent&nbsp;intent)</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getGCMIntentServiceClassName(Context)"><!-- --></A><H3>
-getGCMIntentServiceClassName</H3>
-<PRE>
-protected java.lang.String <B>getGCMIntentServiceClassName</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Gets the class name of the intent service that will handle GCM messages.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMBroadcastReceiver.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMBroadcastReceiver.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMConstants.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMConstants.html
deleted file mode 100644
index 205bcf0..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMConstants.html
+++ /dev/null
@@ -1,674 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-GCMConstants
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GCMConstants";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMConstants.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMConstants.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm</FONT>
-<BR>
-Class GCMConstants</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.GCMConstants</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>GCMConstants</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-Constants used by the GCM library.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#DEFAULT_INTENT_SERVICE_CLASS_NAME">DEFAULT_INTENT_SERVICE_CLASS_NAME</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_ACCOUNT_MISSING">ERROR_ACCOUNT_MISSING</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There is no Google account on the phone.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_AUTHENTICATION_FAILED">ERROR_AUTHENTICATION_FAILED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bad password.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_INVALID_PARAMETERS">ERROR_INVALID_PARAMETERS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The request sent by the phone does not contain the expected parameters.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_INVALID_SENDER">ERROR_INVALID_SENDER</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The sender account is not recognized.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_PHONE_REGISTRATION_ERROR">ERROR_PHONE_REGISTRATION_ERROR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Incorrect phone registration with Google.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#ERROR_SERVICE_NOT_AVAILABLE">ERROR_SERVICE_NOT_AVAILABLE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The device can't read the response, or there was a 500/503 from the
- server that can be retried later.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_APPLICATION_PENDING_INTENT">EXTRA_APPLICATION_PENDING_INTENT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to get the
- application info.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_ERROR">EXTRA_ERROR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- an error when the registration fails.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_FROM">EXTRA_FROM</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> to indicate which
- sender (Google API project id) sent the message.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_REGISTRATION_ID">EXTRA_REGISTRATION_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- the registration id when the registration succeeds.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_SENDER">EXTRA_SENDER</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to indicate which
- senders (Google API project ids) can send messages to the application.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_SPECIAL_MESSAGE">EXTRA_SPECIAL_MESSAGE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type of message present in the <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> intent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_TOTAL_DELETED">EXTRA_TOTAL_DELETED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number of messages deleted by the server because the device was idle.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_UNREGISTERED">EXTRA_UNREGISTERED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- that the application has been unregistered.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_LIBRARY_RETRY">INTENT_FROM_GCM_LIBRARY_RETRY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent used by the GCM library to indicate that the registration call
- should be retried.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">INTENT_FROM_GCM_MESSAGE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent sent by GCM containing a message.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">INTENT_FROM_GCM_REGISTRATION_CALLBACK</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent sent by GCM indicating with the result of a registration request.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">INTENT_TO_GCM_REGISTRATION</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent sent to GCM to register the application.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_UNREGISTRATION">INTENT_TO_GCM_UNREGISTRATION</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent sent to GCM to unregister the application.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#PERMISSION_GCM_INTENTS">PERMISSION_GCM_INTENTS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Permission necessary to receive GCM intents.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html#VALUE_DELETED_MESSAGES">VALUE_DELETED_MESSAGES</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Special message indicating the server deleted the pending messages.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="INTENT_TO_GCM_REGISTRATION"><!-- --></A><H3>
-INTENT_TO_GCM_REGISTRATION</H3>
-<PRE>
-public static final java.lang.String <B>INTENT_TO_GCM_REGISTRATION</B></PRE>
-<DL>
-<DD>Intent sent to GCM to register the application.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.INTENT_TO_GCM_REGISTRATION">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="INTENT_TO_GCM_UNREGISTRATION"><!-- --></A><H3>
-INTENT_TO_GCM_UNREGISTRATION</H3>
-<PRE>
-public static final java.lang.String <B>INTENT_TO_GCM_UNREGISTRATION</B></PRE>
-<DL>
-<DD>Intent sent to GCM to unregister the application.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.INTENT_TO_GCM_UNREGISTRATION">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="INTENT_FROM_GCM_REGISTRATION_CALLBACK"><!-- --></A><H3>
-INTENT_FROM_GCM_REGISTRATION_CALLBACK</H3>
-<PRE>
-public static final java.lang.String <B>INTENT_FROM_GCM_REGISTRATION_CALLBACK</B></PRE>
-<DL>
-<DD>Intent sent by GCM indicating with the result of a registration request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="INTENT_FROM_GCM_LIBRARY_RETRY"><!-- --></A><H3>
-INTENT_FROM_GCM_LIBRARY_RETRY</H3>
-<PRE>
-public static final java.lang.String <B>INTENT_FROM_GCM_LIBRARY_RETRY</B></PRE>
-<DL>
-<DD>Intent used by the GCM library to indicate that the registration call
- should be retried.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_LIBRARY_RETRY">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="INTENT_FROM_GCM_MESSAGE"><!-- --></A><H3>
-INTENT_FROM_GCM_MESSAGE</H3>
-<PRE>
-public static final java.lang.String <B>INTENT_FROM_GCM_MESSAGE</B></PRE>
-<DL>
-<DD>Intent sent by GCM containing a message.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_MESSAGE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_SENDER"><!-- --></A><H3>
-EXTRA_SENDER</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_SENDER</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to indicate which
- senders (Google API project ids) can send messages to the application.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_SENDER">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_APPLICATION_PENDING_INTENT"><!-- --></A><H3>
-EXTRA_APPLICATION_PENDING_INTENT</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_APPLICATION_PENDING_INTENT</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to get the
- application info.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_APPLICATION_PENDING_INTENT">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_UNREGISTERED"><!-- --></A><H3>
-EXTRA_UNREGISTERED</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_UNREGISTERED</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- that the application has been unregistered.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_UNREGISTERED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_ERROR"><!-- --></A><H3>
-EXTRA_ERROR</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_ERROR</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- an error when the registration fails. See constants starting with ERROR_
- for possible values.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_ERROR">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_REGISTRATION_ID"><!-- --></A><H3>
-EXTRA_REGISTRATION_ID</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_REGISTRATION_ID</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- the registration id when the registration succeeds.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_REGISTRATION_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_SPECIAL_MESSAGE"><!-- --></A><H3>
-EXTRA_SPECIAL_MESSAGE</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_SPECIAL_MESSAGE</B></PRE>
-<DL>
-<DD>Type of message present in the <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> intent.
- This extra is only set for special messages sent from GCM, not for
- messages originated from the application.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_SPECIAL_MESSAGE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="VALUE_DELETED_MESSAGES"><!-- --></A><H3>
-VALUE_DELETED_MESSAGES</H3>
-<PRE>
-public static final java.lang.String <B>VALUE_DELETED_MESSAGES</B></PRE>
-<DL>
-<DD>Special message indicating the server deleted the pending messages.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.VALUE_DELETED_MESSAGES">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_TOTAL_DELETED"><!-- --></A><H3>
-EXTRA_TOTAL_DELETED</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_TOTAL_DELETED</B></PRE>
-<DL>
-<DD>Number of messages deleted by the server because the device was idle.
- Present only on messages of special type
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#VALUE_DELETED_MESSAGES">"deleted_messages"</A>
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_TOTAL_DELETED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="EXTRA_FROM"><!-- --></A><H3>
-EXTRA_FROM</H3>
-<PRE>
-public static final java.lang.String <B>EXTRA_FROM</B></PRE>
-<DL>
-<DD>Extra used on <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> to indicate which
- sender (Google API project id) sent the message.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.EXTRA_FROM">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PERMISSION_GCM_INTENTS"><!-- --></A><H3>
-PERMISSION_GCM_INTENTS</H3>
-<PRE>
-public static final java.lang.String <B>PERMISSION_GCM_INTENTS</B></PRE>
-<DL>
-<DD>Permission necessary to receive GCM intents.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.PERMISSION_GCM_INTENTS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="DEFAULT_INTENT_SERVICE_CLASS_NAME"><!-- --></A><H3>
-DEFAULT_INTENT_SERVICE_CLASS_NAME</H3>
-<PRE>
-public static final java.lang.String <B>DEFAULT_INTENT_SERVICE_CLASS_NAME</B></PRE>
-<DL>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><CODE>GCMBroadcastReceiver</CODE></A>,
-<A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.DEFAULT_INTENT_SERVICE_CLASS_NAME">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_SERVICE_NOT_AVAILABLE"><!-- --></A><H3>
-ERROR_SERVICE_NOT_AVAILABLE</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_SERVICE_NOT_AVAILABLE</B></PRE>
-<DL>
-<DD>The device can't read the response, or there was a 500/503 from the
- server that can be retried later. The application should use exponential
- back off and retry.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_SERVICE_NOT_AVAILABLE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_ACCOUNT_MISSING"><!-- --></A><H3>
-ERROR_ACCOUNT_MISSING</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_ACCOUNT_MISSING</B></PRE>
-<DL>
-<DD>There is no Google account on the phone. The application should ask the
- user to open the account manager and add a Google account.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_ACCOUNT_MISSING">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_AUTHENTICATION_FAILED"><!-- --></A><H3>
-ERROR_AUTHENTICATION_FAILED</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_AUTHENTICATION_FAILED</B></PRE>
-<DL>
-<DD>Bad password. The application should ask the user to enter his/her
- password, and let user retry manually later. Fix on the device side.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_AUTHENTICATION_FAILED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_INVALID_PARAMETERS"><!-- --></A><H3>
-ERROR_INVALID_PARAMETERS</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_INVALID_PARAMETERS</B></PRE>
-<DL>
-<DD>The request sent by the phone does not contain the expected parameters.
- This phone doesn't currently support GCM.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_INVALID_PARAMETERS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_INVALID_SENDER"><!-- --></A><H3>
-ERROR_INVALID_SENDER</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_INVALID_SENDER</B></PRE>
-<DL>
-<DD>The sender account is not recognized. Fix on the device side.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_INVALID_SENDER">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_PHONE_REGISTRATION_ERROR"><!-- --></A><H3>
-ERROR_PHONE_REGISTRATION_ERROR</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_PHONE_REGISTRATION_ERROR</B></PRE>
-<DL>
-<DD>Incorrect phone registration with Google. This phone doesn't currently
- support GCM.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMConstants.ERROR_PHONE_REGISTRATION_ERROR">Constant Field Values</A></DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMConstants.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMConstants.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMRegistrar.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMRegistrar.html
deleted file mode 100644
index c29bf90..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMRegistrar.html
+++ /dev/null
@@ -1,543 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-GCMRegistrar
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="GCMRegistrar";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMRegistrar.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMRegistrar.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm</FONT>
-<BR>
-Class GCMRegistrar</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.GCMRegistrar</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>GCMRegistrar</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-Utilities for device registration.
- <p>
- <strong>Note:</strong> this class uses a private <CODE>SharedPreferences</CODE>
- object to keep track of the registration token.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS">DEFAULT_ON_SERVER_LIFESPAN_MS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default lifespan (7 days) of the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(Context)"><CODE>isRegisteredOnServer(Context)</CODE></A>
- flag until it is considered expired.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#checkDevice(Context)">checkDevice</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the device has the proper dependencies installed.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#checkManifest(Context)">checkManifest</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks that the application manifest is properly configured.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#getRegisterOnServerLifespan(Context)">getRegisterOnServerLifespan</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets how long (in milliseconds) the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- property is valid.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#getRegistrationId(Context)">getRegistrationId</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the current registration id for application on GCM service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)">isRegistered</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks whether the application was successfully registered on GCM
- service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(Context)">isRegisteredOnServer</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks whether the device was successfully registered in the server side,
- as set by <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)"><CODE>setRegisteredOnServer(Context, boolean)</CODE></A>.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#onDestroy(Context)">onDestroy</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clear internal resources.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#register(Context, java.lang.String...)">register</A></B>(Context&nbsp;context,
- java.lang.String...&nbsp;senderIds)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initiate messaging registration for the current application.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)">setRegisteredOnServer</A></B>(Context&nbsp;context,
- boolean&nbsp;flag)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets whether the device was successfully registered in the server side.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisterOnServerLifespan(Context, long)">setRegisterOnServerLifespan</A></B>(Context&nbsp;context,
- long&nbsp;lifespan)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets how long (in milliseconds) the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- flag is valid.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#unregister(Context)">unregister</A></B>(Context&nbsp;context)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unregister the application.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="DEFAULT_ON_SERVER_LIFESPAN_MS"><!-- --></A><H3>
-DEFAULT_ON_SERVER_LIFESPAN_MS</H3>
-<PRE>
-public static final long <B>DEFAULT_ON_SERVER_LIFESPAN_MS</B></PRE>
-<DL>
-<DD>Default lifespan (7 days) of the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(Context)"><CODE>isRegisteredOnServer(Context)</CODE></A>
- flag until it is considered expired.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#com.google.android.gcm.GCMRegistrar.DEFAULT_ON_SERVER_LIFESPAN_MS">Constant Field Values</A></DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="checkDevice(Context)"><!-- --></A><H3>
-checkDevice</H3>
-<PRE>
-public static void <B>checkDevice</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Checks if the device has the proper dependencies installed.
- <p>
- This method should be called when the application starts to verify that
- the device supports GCM.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application context.
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.UnsupportedOperationException</CODE> - if the device does not support GCM.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="checkManifest(Context)"><!-- --></A><H3>
-checkManifest</H3>
-<PRE>
-public static void <B>checkManifest</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Checks that the application manifest is properly configured.
- <p>
- A proper configuration means:
- <ol>
- <li>It creates a custom permission called
- <code>PACKAGE_NAME.permission.C2D_MESSAGE</code>.
- <li>It defines at least one <CODE>BroadcastReceiver</CODE> with category
- <code>PACKAGE_NAME</code>.
- <li>The <CODE>BroadcastReceiver</CODE>(s) uses the
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#PERMISSION_GCM_INTENTS">"com.google.android.c2dm.permission.SEND"</A>
- permission.
- <li>The <CODE>BroadcastReceiver</CODE>(s) handles the 2 GCM intents
- (<A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A>
- and
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A>).
- </ol>
- ...where <code>PACKAGE_NAME</code> is the application package.
- <p>
- This method should be used during development time to verify that the
- manifest is properly set up, but it doesn't need to be called once the
- application is deployed to the users' devices.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application context.
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalStateException</CODE> - if any of the conditions above is not met.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="register(Context, java.lang.String...)"><!-- --></A><H3>
-register</H3>
-<PRE>
-public static void <B>register</B>(Context&nbsp;context,
- java.lang.String...&nbsp;senderIds)</PRE>
-<DL>
-<DD>Initiate messaging registration for the current application.
- <p>
- The result will be returned as an
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK"><CODE>GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK</CODE></A> intent with
- either a <A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_REGISTRATION_ID"><CODE>GCMConstants.EXTRA_REGISTRATION_ID</CODE></A> or
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_ERROR"><CODE>GCMConstants.EXTRA_ERROR</CODE></A>.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>context</CODE> - application context.<DD><CODE>senderIds</CODE> - Google Project ID of the accounts authorized to send
- messages to this application.
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalStateException</CODE> - if device does not have all GCM
- dependencies installed.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="unregister(Context)"><!-- --></A><H3>
-unregister</H3>
-<PRE>
-public static void <B>unregister</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Unregister the application.
- <p>
- The result will be returned as an
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK"><CODE>GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK</CODE></A> intent with an
- <A HREF="../../../../com/google/android/gcm/GCMConstants.html#EXTRA_UNREGISTERED"><CODE>GCMConstants.EXTRA_UNREGISTERED</CODE></A> extra.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="onDestroy(Context)"><!-- --></A><H3>
-onDestroy</H3>
-<PRE>
-public static void <B>onDestroy</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Clear internal resources.
-
- <p>
- This method should be called by the main activity's <code>onDestroy()</code>
- method.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getRegistrationId(Context)"><!-- --></A><H3>
-getRegistrationId</H3>
-<PRE>
-public static java.lang.String <B>getRegistrationId</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Gets the current registration id for application on GCM service.
- <p>
- If result is empty, the registration has failed.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>registration id, or empty string if the registration is not
- complete.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRegistered(Context)"><!-- --></A><H3>
-isRegistered</H3>
-<PRE>
-public static boolean <B>isRegistered</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Checks whether the application was successfully registered on GCM
- service.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setRegisteredOnServer(Context, boolean)"><!-- --></A><H3>
-setRegisteredOnServer</H3>
-<PRE>
-public static void <B>setRegisteredOnServer</B>(Context&nbsp;context,
- boolean&nbsp;flag)</PRE>
-<DL>
-<DD>Sets whether the device was successfully registered in the server side.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isRegisteredOnServer(Context)"><!-- --></A><H3>
-isRegisteredOnServer</H3>
-<PRE>
-public static boolean <B>isRegisteredOnServer</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Checks whether the device was successfully registered in the server side,
- as set by <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)"><CODE>setRegisteredOnServer(Context, boolean)</CODE></A>.
-
- <p>To avoid the scenario where the device sends the registration to the
- server but the server loses it, this flag has an expiration date, which
- is <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS"><CODE>DEFAULT_ON_SERVER_LIFESPAN_MS</CODE></A> by default (but can be changed
- by <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisterOnServerLifespan(Context, long)"><CODE>setRegisterOnServerLifespan(Context, long)</CODE></A>).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getRegisterOnServerLifespan(Context)"><!-- --></A><H3>
-getRegisterOnServerLifespan</H3>
-<PRE>
-public static long <B>getRegisterOnServerLifespan</B>(Context&nbsp;context)</PRE>
-<DL>
-<DD>Gets how long (in milliseconds) the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- property is valid.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>value set by <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)"><CODE>setRegisteredOnServer(Context, boolean)</CODE></A> or
- <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS"><CODE>DEFAULT_ON_SERVER_LIFESPAN_MS</CODE></A> if not set.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="setRegisterOnServerLifespan(Context, long)"><!-- --></A><H3>
-setRegisterOnServerLifespan</H3>
-<PRE>
-public static void <B>setRegisterOnServerLifespan</B>(Context&nbsp;context,
- long&nbsp;lifespan)</PRE>
-<DL>
-<DD>Sets how long (in milliseconds) the <A HREF="../../../../com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- flag is valid.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/GCMRegistrar.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="GCMRegistrar.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-frame.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-frame.html
deleted file mode 100644
index a2a599d..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-frame.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-com.google.android.gcm
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../com/google/android/gcm/package-summary.html" target="classFrame">com.google.android.gcm</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="GCMBaseIntentService.html" title="class in com.google.android.gcm" target="classFrame">GCMBaseIntentService</A>
-<BR>
-<A HREF="GCMBroadcastReceiver.html" title="class in com.google.android.gcm" target="classFrame">GCMBroadcastReceiver</A>
-<BR>
-<A HREF="GCMConstants.html" title="class in com.google.android.gcm" target="classFrame">GCMConstants</A>
-<BR>
-<A HREF="GCMRegistrar.html" title="class in com.google.android.gcm" target="classFrame">GCMRegistrar</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-summary.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-summary.html
deleted file mode 100644
index c8e0341..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-summary.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-com.google.android.gcm
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="com.google.android.gcm";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.android.gcm
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A></B></TD>
-<TD>Skeleton for application-specific <CODE>IntentService</CODE>s responsible for
- handling communication from Google Cloud Messaging service.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm">GCMBroadcastReceiver</A></B></TD>
-<TD><CODE>BroadcastReceiver</CODE> that receives GCM messages and delivers them to
- an application-specific <A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><CODE>GCMBaseIntentService</CODE></A> subclass.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A></B></TD>
-<TD>Constants used by the GCM library.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A></B></TD>
-<TD>Utilities for device registration.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-tree.html b/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-tree.html
deleted file mode 100644
index 0e27efe..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/com/google/android/gcm/package-tree.html
+++ /dev/null
@@ -1,150 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-com.google.android.gcm Class Hierarchy
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="com.google.android.gcm Class Hierarchy";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.android.gcm
-</H2>
-</CENTER>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.Object<UL>
-<LI TYPE="circle">BroadcastReceiver<UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="../../../../com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>GCMBroadcastReceiver</B></A></UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="../../../../com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>GCMConstants</B></A><LI TYPE="circle">com.google.android.gcm.<A HREF="../../../../com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm"><B>GCMRegistrar</B></A><LI TYPE="circle">IntentService<UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="../../../../com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><B>GCMBaseIntentService</B></A></UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../index.html?com/google/android/gcm/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/constant-values.html b/docs/html/guide/google/gcm/client-javadoc/constant-values.html
deleted file mode 100644
index 796d196..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/constant-values.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-Constant Field Values
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Constant Field Values";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-Constant Field Values</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-<LI><A HREF="#com.google">com.google.*</A>
-</UL>
-
-<A NAME="com.google"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left"><FONT SIZE="+2">
-com.google.*</FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMBaseIntentService.TAG"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMBaseIntentService.html#TAG">TAG</A></CODE></TD>
-<TD ALIGN="right"><CODE>"GCMBaseIntentService"</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.DEFAULT_INTENT_SERVICE_CLASS_NAME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#DEFAULT_INTENT_SERVICE_CLASS_NAME">DEFAULT_INTENT_SERVICE_CLASS_NAME</A></CODE></TD>
-<TD ALIGN="right"><CODE>".GCMIntentService"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_ACCOUNT_MISSING"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_ACCOUNT_MISSING">ERROR_ACCOUNT_MISSING</A></CODE></TD>
-<TD ALIGN="right"><CODE>"ACCOUNT_MISSING"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_AUTHENTICATION_FAILED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_AUTHENTICATION_FAILED">ERROR_AUTHENTICATION_FAILED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"AUTHENTICATION_FAILED"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_INVALID_PARAMETERS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_INVALID_PARAMETERS">ERROR_INVALID_PARAMETERS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"INVALID_PARAMETERS"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_INVALID_SENDER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_INVALID_SENDER">ERROR_INVALID_SENDER</A></CODE></TD>
-<TD ALIGN="right"><CODE>"INVALID_SENDER"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_PHONE_REGISTRATION_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_PHONE_REGISTRATION_ERROR">ERROR_PHONE_REGISTRATION_ERROR</A></CODE></TD>
-<TD ALIGN="right"><CODE>"PHONE_REGISTRATION_ERROR"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.ERROR_SERVICE_NOT_AVAILABLE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#ERROR_SERVICE_NOT_AVAILABLE">ERROR_SERVICE_NOT_AVAILABLE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"SERVICE_NOT_AVAILABLE"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_APPLICATION_PENDING_INTENT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_APPLICATION_PENDING_INTENT">EXTRA_APPLICATION_PENDING_INTENT</A></CODE></TD>
-<TD ALIGN="right"><CODE>"app"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_ERROR">EXTRA_ERROR</A></CODE></TD>
-<TD ALIGN="right"><CODE>"error"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_FROM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_FROM">EXTRA_FROM</A></CODE></TD>
-<TD ALIGN="right"><CODE>"from"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_REGISTRATION_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_REGISTRATION_ID">EXTRA_REGISTRATION_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"registration_id"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_SENDER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_SENDER">EXTRA_SENDER</A></CODE></TD>
-<TD ALIGN="right"><CODE>"sender"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_SPECIAL_MESSAGE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_SPECIAL_MESSAGE">EXTRA_SPECIAL_MESSAGE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"message_type"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_TOTAL_DELETED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_TOTAL_DELETED">EXTRA_TOTAL_DELETED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"total_deleted"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.EXTRA_UNREGISTERED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#EXTRA_UNREGISTERED">EXTRA_UNREGISTERED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"unregistered"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_LIBRARY_RETRY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_LIBRARY_RETRY">INTENT_FROM_GCM_LIBRARY_RETRY</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.gcm.intent.RETRY"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_MESSAGE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">INTENT_FROM_GCM_MESSAGE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.c2dm.intent.RECEIVE"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">INTENT_FROM_GCM_REGISTRATION_CALLBACK</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.c2dm.intent.REGISTRATION"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.INTENT_TO_GCM_REGISTRATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">INTENT_TO_GCM_REGISTRATION</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.c2dm.intent.REGISTER"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.INTENT_TO_GCM_UNREGISTRATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_UNREGISTRATION">INTENT_TO_GCM_UNREGISTRATION</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.c2dm.intent.UNREGISTER"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.PERMISSION_GCM_INTENTS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#PERMISSION_GCM_INTENTS">PERMISSION_GCM_INTENTS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"com.google.android.c2dm.permission.SEND"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMConstants.VALUE_DELETED_MESSAGES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMConstants.html#VALUE_DELETED_MESSAGES">VALUE_DELETED_MESSAGES</A></CODE></TD>
-<TD ALIGN="right"><CODE>"deleted_messages"</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.GCMRegistrar.DEFAULT_ON_SERVER_LIFESPAN_MS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;long</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS">DEFAULT_ON_SERVER_LIFESPAN_MS</A></CODE></TD>
-<TD ALIGN="right"><CODE>604800000L</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/default.css b/docs/html/guide/google/gcm/client-javadoc/default.css
deleted file mode 100644
index f11daf7..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/default.css
+++ /dev/null
@@ -1,4160 +0,0 @@
-/* color definitions */
-/* 16 column layout */
-/* clearfix idiom */
-/* common mixins */
-/* page layout + top-level styles */
-::-webkit-selection,
-::-moz-selection,
-::selection {
- background-color: #0099cc;
- color: #fff; }
-
-html, body {
- height: 100%;
- margin: 0;
- padding: 0;
- background-color:#F9F9F9;
- -webkit-font-smoothing: antialiased;
- /* prevent subpixel antialiasing, which thickens the text */
- /* text-rendering: optimizeLegibility; */
- /* turned off ligatures due to bug 5945455 */ }
-
-body {
- color: #222;
- font: 14px/19px Roboto, sans-serif;
- font-weight: 400;
- letter-spacing:.1;
- padding:0 10px; }
-
-#page-container {
- width: 940px;
- margin: 0 40px; }
-
-#page-header {
- height: 80px;
- margin-bottom: 20px;
- font-size: 48px;
- line-height: 48px;
- font-weight: 100;
- padding-left: 10px; }
- #page-header a {
- display: block;
- position: relative;
- top: 20px;
- text-decoration: none;
- color: #555555 !important; }
-
-#main-row {
- display: inline-block; }
- #main-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- * html #main-row {
- height: 1px; }
-
-#page-footer {
- margin-left: 190px;
- margin-top: 80px;
- color: #999999;
- padding-bottom: 40px;
- font-size: 12px;
- line-height: 15px; }
- #page-footer a {
- color: #777777; }
- #page-footer #copyright {
- margin-bottom: 10px; }
-
-#nav-container {
- width: 160px;
- min-height: 10px;
- margin-right: 20px;
- float: left; }
-
-#nav {
- margin:0;
- padding:0 0 30px;
-}
-
-#side-nav {
- min-height:5px; /* silly way to avoid doc floating left when nav goes fixed */
- margin-bottom:1px;
-}
-#devdoc-nav {
- outline:none;
- width:auto;
- margin: 20px 0 0; }
-
-#devdoc-nav h2 {
- border:0;
-}
-
-#devdoc-nav.fixed {
- position: fixed;
- margin:0;
- top: 20px; }
-
-#content {
- width: 760px;
- float: left; }
-
-a:hover,
-acronym:hover {
- color: #7aa1b0 !important; }
-
-a:focus,
-a:active {
- color: #33b5e5 !important; }
-
-img {
- border: none; }
-#jd-content img {
- margin-bottom:15px;
-}
-
-ul {
- margin: 0;
- padding: 0; }
-
-strong {
- font-weight: 500; }
-
-em {
- font-style: italic; }
-
-acronym {
- border-bottom: 1px dotted #555555;
- cursor: help; }
-
-acronym:hover {
- border-bottom-color: #7aa1b0; }
-
-img.with-shadow,
-video.with-shadow {
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25); }
-
-/* disclosures mixin */
-/* content layout */
-.layout-content-row {
- display: inline-block;
- margin-bottom: 10px; }
- .layout-content-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- * html .layout-content-row {
- height: 1px; }
-
-.layout-content-col {
- float: left;
- margin-left: 20px; }
- .layout-content-col:first-child {
- margin-left: 0; }
- .layout-content-col h3,
- .layout-content-col h4 {
- margin-top:0; }
-
-.layout-content-col.span-1 {
- width: 40px; }
-
-.layout-content-col.span-2 {
- width: 100px; }
-
-.layout-content-col.span-3 {
- width: 160px; }
-
-.layout-content-col.span-4 {
- width: 220px; }
-
-.layout-content-col.span-5 {
- width: 280px; }
-
-.layout-content-col.span-6 {
- width: 340px; }
-
-.layout-content-col.span-7 {
- width: 400px; }
-
-.layout-content-col.span-8 {
- width: 460px; }
-
-.layout-content-col.span-9 {
- width: 520px; }
-
-.layout-content-col.span-10 {
- width: 580px; }
-
-.layout-content-col.span-11 {
- width: 640px; }
-
-.layout-content-col.span-12 {
- width: 700px; }
-
-.layout-content-col.span-13 {
- width: 760px; }
-
-.vspace.size-1 {
- height: 10px; }
-
-.vspace.size-2 {
- height: 20px; }
-
-.vspace.size-3 {
- height: 30px; }
-
-.vspace.size-4 {
- height: 40px; }
-
-.vspace.size-5 {
- height: 50px; }
-
-.vspace.size-6 {
- height: 60px; }
-
-.vspace.size-7 {
- height: 70px; }
-
-.vspace.size-8 {
- height: 80px; }
-
-.vspace.size-9 {
- height: 90px; }
-
-.vspace.size-10 {
- height: 100px; }
-
-.vspace.size-11 {
- height: 110px; }
-
-.vspace.size-12 {
- height: 120px; }
-
-.vspace.size-13 {
- height: 130px; }
-
-.vspace.size-14 {
- height: 140px; }
-
-.vspace.size-15 {
- height: 150px; }
-
-.vspace.size-16 {
- height: 160px; }
-
-/* nav */
-#nav {
- /* section header divs */
- /* expanded section header divs */
- /* sublinks */ }
- #nav li {
- list-style-type: none;
- font-size: 14px;
- margin:0;
- padding:0;
- line-height: 15px; }
- #nav a {
- color: #555555;
- text-decoration: none; }
- #nav .nav-section-header {
- position: relative;
- margin-bottom: 1px;
- padding: 0 30px 0 0; }
- #nav li.selected a, #nav li.selected > .nav-section-header > a {
- color: #09C;
- }
- #nav li.selected ul li a {
- /* don't highlight child items */
- color: #555555; }
- #nav .nav-section .nav-section .nav-section-header {
- /* no white line between second level sections */
- margin-bottom: 0; }
- /* section header links */
- #nav > li > div > a {
- display: block;
- color: #333333;
- font-weight: 500;
- padding: 10px 0 10px 10px; }
- #nav .nav-section-header:after {
- content: '';
- background: transparent url(../images/styles/disclosure_down.png) no-repeat scroll 50% 50%;
- width: 34px;
- height: 34px;
- display: block;
- position: absolute;
- top: 0;
- right: 0; }
- #nav .nav-section-header.empty:after {
- display: none; }
- /* nested nav headers */
- #nav .nav-section .nav-section {
- position: relative;
- padding: 0;
- margin: 0; }
- #nav .nav-section li a {
- /* first gen child (2nd level li) */
- display:block;
- font-weight: normal;
- text-transform: none;
- padding: 7px 5px 7px 10px;
- }
- #nav .nav-section li li a {
- /* second gen child (3rd level li) */
- padding: 5px 5px 5px 10px;
- }
- #nav li.expanded .nav-section-header {
- background:#e9e9e9;
- background: rgba(0, 0, 0, 0.05); }
- #nav li.expanded li .nav-section-header {
- background: transparent; }
- #nav li.expanded li ul {
- /* 3rd level ul */
- padding:0 10px;
- }
- #nav li.expanded > .nav-section-header:after {
- content: '';
- background: transparent url(../images/styles/disclosure_up.png) no-repeat scroll 50% 50%;
- width: 34px;
- height: 34px; }
- #nav li ul {
- display:none;
- overflow: hidden;
- margin: 0; }
- #nav li ul.animate-height-in {
- -webkit-transition: height 0.25s ease-in;
- -moz-transition: height 0.25s ease-in;
- transition: height 0.25s ease-in; }
- #nav li ul.animate-height-out {
- -webkit-transition: height 0.25s ease-out;
- -moz-transition: height 0.25s ease-out;
- transition: height 0.25s ease-out; }
- #nav li ul li {
- padding: 0; }
- #nav li li li {
- padding: 0; }
- #nav li.expanded ul {
- }
- #nav li ul > li {
- padding:0;
- }
- #nav li ul > li:last-child {
- padding-bottom:5px;
- }
- #nav li.expanded ul > li {
- background:#efefef;
- background: rgba(0, 0, 0, 0.03); }
- #nav li.expanded ul > li li {
- background:inherit; }
-
-.new,
-.new-child {
- font-size: .78em;
- font-weight: bold;
- color: #ff3d3d;
- vertical-align:top;
- white-space:nowrap;
-}
-
-/* content header */
-.content-header {
- height: 30px;
- margin:20px 0 25px;
- padding:0 0 10px;}
-.content-header.just-links {
- margin-bottom:0;
- padding-bottom:0;}
-
-.content-header h1 {
- color:#000;
- margin:0;
- border-bottom:0;
- padding:0;
-}
-
-.content-footer {
- border-top: 1px solid #ccc;
- margin-top: 10px;
- padding-top:10px;
- height: 30px; }
-
-.content-footer .col-9 {
- margin-left:0;
-}
-.content-footer .col-4 {
- margin-right:0;
-}
-.content-footer.wrap {
- width:940px;
-}
-
-.paging-links {
- position: relative; }
- .paging-links a {
- position: absolute; }
- .paging-links a,
- .training-nav-top a {
- font-size: 14px;
- line-height: 30px;
- color: #555555;
- text-decoration: none;
- text-transform: uppercase; }
- .paging-links .prev-page-link,
- .training-nav-top .prev-page-link {
- left: -5px; }
- .paging-links .prev-page-link:before,
- .training-nav-top .prev-page-link:before {
- content: '';
- background: transparent url(../images/styles/disclosure_left.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-right: 5px; }
- .paging-links .next-page-link,
- .training-nav-top .next-page-link,
- .training-nav-top .start-class-link,
- .training-nav-top .start-course-link {
- right: 10px; }
- .next-page-link:after,
- .start-class-link:after,
- .start-course-link:after,
- .next-class-link:after {
- content: '';
- background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-left: 5px; }
-
-
- .training-nav-top a {
- display:block;
- float:left;
- width:108px;
- height:28px;
- padding: 8px 15px;
- line-height:28px;
- text-align:center;
- border:1px solid #DADADA;
- border-bottom:0;
- }
-
- .training-nav-top a.next-page-link {
- border-left:0;
- width:109px;
- }
-
- .training-nav-top a.disabled,
- .content-footer a.disabled {
- color:#999;
- }
-
- .training-nav-top a.disabled:hover,
- .content-footer a.disabled:hover {
- cursor:default;
- color:#999 !important;
- }
-
- .training-nav-top a.start-class-link,
- .training-nav-top a.start-course-link {
- width:248px;
- }
-
- .hide {
- display:none !important;
- }
-
- .content-footer.next-class {
- display:block;
- border:0;
- margin-top:0;
- padding-top:0;
- }
-
- .content-footer.next-class a.next-class-link {
- display:block;
- float:right;
- text-transform:uppercase;
- }
-
-/* content body */
-@-webkit-keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-@-moz-keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-@keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-h2:target,
-h3:target {
- -webkit-animation-name: glowheader;
- -moz-animation-name: glowheader;
- animation-name: glowheader;
- -webkit-animation-duration: 0.7s;
- -moz-animation-duration: 0.7s;
- animation-duration: 0.7s;
- -webkit-animation-timing-function: ease-out;
- -moz-animation-timing-function: ease-out;
- animation-timing-function: ease-out; }
-
-.design ol h4 {
- margin-bottom:0;
-}
-.design ol {
- counter-reset: item; }
- .design ol>li {
- font-size: 14px;
- line-height: 20px;
- list-style-type: none;
- position: relative; }
- .design ol>li:before {
- content: counter(item) ". ";
- counter-increment: item;
- position: absolute;
- left: -20px;
- top: 0; }
- .design ol li.value-1:before {
- content: "1. "; }
- .design ol li.value-2:before {
- content: "2. "; }
- .design ol li.value-3:before {
- content: "3. "; }
- .design ol li.value-4:before {
- content: "4. "; }
- .design ol li.value-5:before {
- content: "5. "; }
- .design ol li.value-6:before {
- content: "6. "; }
- .design ol li.value-7:before {
- content: "7. "; }
- .design ol li.value-8:before {
- content: "8. "; }
- .design ol li.value-9:before {
- content: "9. "; }
- .design ol li.value-10:before {
- content: "10. "; }
-.design .with-callouts ol>li {
- list-style-position: inside;
- margin-left: 0; }
- .design .with-callouts ol>li:before {
- display: inline;
- left: -20px;
- float: left;
- width: 17px;
- color: #33b5e5;
- font-weight: 500; }
-.design .with-callouts ul>li {
- list-style-position: outside; }
-
-/* special list items */
-li.no-bullet {
- list-style-type: none !important; }
-li.no-bullet *{
- margin:0; }
-
-.design li.with-icon {
- position: relative;
- margin-left: 20px;
- min-height: 30px; }
- .design li.with-icon p {
- margin-left: 0 !important; }
- .design li.with-icon:before {
- position: absolute;
- left: -40px;
- top: 0;
- content: '';
- width: 30px;
- height: 30px; }
- .design li.with-icon.tablet:before {
- background-image: url(../images/styles/ico_phone_tablet.png); }
- .design li.with-icon.web:before {
- background-image: url(../images/styles/ico_web.png); }
- .design li.with-icon.action:before {
- background-image: url(../images/styles/ico_action.png); }
- .design li.with-icon.use:before {
- background-image: url(../images/styles/ico_use.png); }
-
-/* figures and callouts */
-.figure {
- position: relative; }
- .figure.pad-below {
- margin-bottom: 20px; }
- .figure .figure-callout {
- position: absolute;
- color: #fff;
- font-weight: 500;
- font-size: 16px;
- line-height: 23px;
- text-align: center;
- background: transparent url(../images/styles/callout.png) no-repeat scroll 50% 50%;
- padding-right: 2px;
- width: 30px;
- height: 29px;
- z-index: 1000; }
- .figure .figure-callout.top {
- top: -9px; }
- .figure .figure-callout.right {
- right: -5px; }
-
-.figure-caption {
- margin: 0 10px 20px 0;
- font-size: 14px;
- line-height: 20px;
- font-style: italic; }
-
-/* rows of figures */
-.figure-row {
- font-size: 0;
- line-height: 0;
- /* to prevent space between figures */ }
- .figure-row .figure {
- display: inline-block;
- vertical-align: top; }
- .figure-row .figure + .figure {
- margin-left: 10px;
- /* reintroduce space between figures */ }
-
-/* video containers */
-.framed-galaxynexus-land-span-13 {
- background: transparent url(../images/styles/device_galaxynexus_blank_land_span13.png) no-repeat
-scroll top left;
- padding: 42px 122px 62px 126px;
- overflow: hidden; }
- .framed-galaxynexus-land-span-13, .framed-galaxynexus-land-span-13 video,
-.framed-galaxynexus-land-span-13 img {
- width: 512px;
- height: 286px; }
-
-.framed-galaxynexus-port-span-9 {
- background: transparent url(../images/styles/device_galaxynexus_blank_port_span9.png) no-repeat
-scroll top left;
- padding: 95px 122px 107px 124px;
- overflow: hidden; }
- .framed-galaxynexus-port-span-9, .framed-galaxynexus-port-span-9 video,
-.framed-galaxynexus-port-span-9 img {
- width: 274px;
- height: 488px; }
-
-.framed-galaxynexus-port-span-5 {
- background: transparent url(../images/styles/device_galaxynexus_blank_port_span5.png) no-repeat
-scroll top left;
- padding: 75px 31px 76px 33px;
- overflow: hidden; }
- .framed-galaxynexus-port-span-5, .framed-galaxynexus-port-span-5 video,
-.framed-galaxynexus-port-span-5 img {
- width: 216px;
- height: 384px; }
-
-/* landing page disclosures */
-.landing-page-link {
- text-decoration: none;
- font-weight: 500;
- color: #333333; }
- .landing-page-link:after {
- content: '';
- background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-left: 5px; }
-
-/* tooltips */
-.tooltip-box {
- position: absolute;
- background-color: rgba(0, 0, 0, 0.9);
- border-radius: 2px;
- font-size: 14px;
- line-height: 20px;
- color: #fff;
- padding: 6px 10px;
- max-width: 250px;
- z-index: 10000; }
- .tooltip-box.below:after {
- position: absolute;
- content: '';
- line-height: 0;
- display: block;
- top: -10px;
- left: 5px;
- border: 5px solid transparent;
- border-bottom-color: rgba(0, 0, 0, 0.9); }
-
-/* video note */
-.video-instructions {
- margin-top: 10px;
- margin-bottom: 10px; }
- .video-instructions:before {
- content: '';
- background: transparent url(../images/styles/ico_movie_inline.png) no-repeat scroll top left;
- display: inline-block;
- width: 12px;
- height: 12px;
- margin-right: 8px; }
- .video-instructions:after {
- content: 'Click device screen to replay movie.'; }
-
-/* download buttons */
-.download-button {
- display: block;
- margin-bottom: 5px;
- text-decoration: none;
- background-color: #33b5e5;
- color: #fff !important;
- font-weight: 500;
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);
- padding: 6px 12px;
- border-radius: 2px; }
- .download-button:hover, .download-button:focus {
- background-color: #0099cc;
- color: #fff !important; }
- .download-button:active {
- background-color: #006699; }
-
-/* UI tables and other things found in Writing style and Settings pattern */
-.ui-table {
- width: 100%;
- background-color: #282828;
- color: #fff;
- border-radius: 2px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
- border-collapse: separate; }
- .ui-table th,
- .ui-table td {
- padding: 5px 10px;
- background-color: inherit;
- border:0;}
- .ui-table thead th {
- font-weight: bold; }
- .ui-table tfoot td {
- border-top: 1px solid #494949;
- border-right: 1px solid #494949;
- text-align: center; }
- .ui-table tfoot td:last-child {
- border-right: 0; }
-
-.layout-with-list-item-margins {
- margin-left: 30px !important; }
-
-.emulate-content-left-padding {
- margin-left: 10px; }
-
-.do-dont-label {
- margin-bottom: 10px;
- padding-left: 20px;
- background: transparent none no-repeat scroll 0px 3px; }
- .do-dont-label.bad {
- background-image: url(../images/styles/ico_wrong.png); }
- .do-dont-label.good {
- background-image: url(../images/styles/ico_good.png); }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***** PREVIOUSLY style.css ******************/
-
-
-
-
-
-@media screen, projection, print {
-[dir='rtl'] {
- direction: rtl;
-}
-html {
- line-height: 20px;
-}
-pre, table, input, textarea, code {
- font-size: 1em;
-}
-address, abbr, cite {
- font-style: normal;
-}
-[dir='rtl'] th {
- text-align: right;
-}
-html[lang^=ja] blockquote, html[lang^=ja] q, html[lang^=ko] blockquote, html[lang^=ko] q,
-html[lang^=zh] blockquote, html[lang^=zh] q {
- font-style: normal;
-}
-q {
- font-style: italic;
-}
-fieldset, iframe, img {
- border: 0;
-}
-img {
- -ms-interpolation-mode: bicubic;
- vertical-align: middle;
- max-width: 100%;
-}
-q {
- quotes: none;
-}
-sup, sub {
- font-size: 11px;
- line-height: 0;
-}
-}
-
-@media screen, projection {
-
-table, fieldset {
- margin: 0;
-}
-h1 {
- color:#333;
- font-size: 22px;
- margin: 20px 0 20px;
- padding:0 0 10px;
-}
-h1, h2 {
- line-height: 32px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.super {
- font-size: 37px;
-}
-h2 {
- color:#333;
- font-size: 20px;
- margin: 20px 0 20px;
- padding:0;
-}
-h3 {
- color:#333;
- font-size: 18px;
-}
-h3, h4 {
- color:#333;
- line-height: 20px;
- margin: 10px 0;
-}
-h4 {
- font-size: 16px;
-}
-h5 {
- font-size: 14px;
-}
-h5, h6 {
- margin: 5px 0;
-}
-h6 {
- font-size: 12px;
-}
-hr { /* applied to the bottom of h2 elements */
- height: 1px;
- margin: 5px 0 20px;
- border: 0;
- background: #ccc;
-}
-p, pre, table, form {
- margin: 0 0 15px;
-}
-small {
- font-size: 11.5px;
- color: #000;
-}
-ul, ol {
- margin: 0 0 15px 18px;
- padding: 0;
-}
-[dir='rtl'] ul, [dir='rtl'] ol {
- margin: 10px 30px 10px 10px;
-}
-ul ul, ul ol, ol ul, ol ol {
- margin-bottom: 0;
- margin-top: 0;
-}
-li {
- margin:0 0 4px;
-}
-dd {
- margin:0 0 10px 30px;
-}
-dd p {
- margin:10px 0 0;
-}
-ul p,
-ol p {
- margin:10px 0 0;
-}
-pre strong, pre b, a strong, a b, a code {
- color: inherit;
-}
-pre, code {
- color: #060;
- font: 14px/1.5 'courier new', courier, monospace;
-}
-code {
- font-weight:bold;
-}
-
-legend {
- display: none;
-}
-a:link, a:visited {
- color: #258aaf;
- text-decoration: none;
-}
-a:focus, a:hover, a:active {
- color: #33B5E5;
- text-decoration: none;
-}
-strong, b {
- font-weight:bold;
- color: #222;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
- border:0;
- margin: .5em 1em 1em 0;
- width:100%; /* consistent table widths; within IE's quirks */
- background-color:#f7f7f7;
-}
-th, td {
- padding: 4px 12px;
- vertical-align: top;
- text-align: left;
-}
-td {
- background-color:inherit;
- border:solid 1px #DDD;
-}
-th {
- background-color: #999;
- color: #fff;
- border:solid 1px #DDD;
- font-weight: normal;
-}
-tr:first-of-type th:first-of-type:empty {
- visibility: hidden;
-}
-/* --------------------------------------------------------------------------
-Footer
-*/
-.line {
- clear: both;
- background: #acbc00;
- background: -moz-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #acbc00),
-color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
- background: -webkit-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -o-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -ms-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- height: 2px;
- margin-top: 150px;
- position: relative;
- z-index: 11;
-}
-#footer {
- font-size:11px;
- clear: both;
- color: #999;
- padding: 15px 0;
- margin-top:10px;
- width:auto;
-}
-#footer-local ul {
- list-style: none;
- margin: 5px 0 30px 0;
-}
-#footer-local li {
- display: inline;
-}
-#footer-local li+li:before {
- content: '|';
- padding: 0 3px;
- color: #e5e5e5;
-}
-#footer-global {
- padding: 10px 15px;
- background: #f5f5f5;
-}
-#footer-global {
- border-top: 1px solid #ebebeb;
- font-size: 11.5px;
- line-height: 1.8;
- list-style: none;
-}
-#footer-global ul {
- margin: 0;
-}
-#footer-global li {
- display: inline;
- font-weight: bold;
-}
-#footer-global li+li:before {
- content: '¬?';
- padding: 0 3px;
-}
-* html #footer-global li {
- margin: 0 13px 0 0;
-}
-* [dir='rtl'] #footer-global li {
- margin: 0 0 0 13px;
-}
-*+html #footer-global li {
- margin: 0 13px 0 0;
-}
-*+[dir='rtl'] #footer-global li {
- margin: 0 0 0 13px;
-}
-#footer-global li a {
- font-weight: normal;
-}
-.locales {
- margin: 10px 0 0 0px;
-}
-[dir='rtl'] .locales {
- background-position: right center;
- float: left;
- padding: 0 24px 0 0;
-}
-.locales form {
- margin: 0;
-}
-.locales select, .sites select {
- line-height: 3.08;
- margin: 0px 0;
- border: solid 1px #EBEBEB;
- -webkit-appearance: none;
- background: white url('../images/arrows-up-down.png') right center no-repeat;
- height: 30px;
- color: #222;
- line-height: normal;
- padding: 5px;
- width: 230px;
-}
-}
-
-/* =============================================================================
- Print Only
- ========================================================================== */
-@media print {
- /* configure printed page */
- @page {
- margin: 0.75in 1in;
- widows: 4;
- orphans: 4;
- }
-
- /* reset spacing metrics */
- html, body, .wrap {
- margin: 0 !important;
- padding: 0 !important;
- width: auto !important;
- }
-
- /* leave enough space on the left for bullets */
- body {
- padding-left: 20px !important;
- }
- #doc-col {
- margin-left: 0;
- }
-
- /* hide a bunch of non-content elements */
- #header, #footer, #nav-x, #side-nav,
- .training-nav-top, .training-nav-bottom,
- #doc-col .content-footer,
- .nav-x, .nav-y,
- .paging-links,
- a.totop {
- display: none !important;
- }
-
- /* remove extra space above page titles */
- #doc-col .content-header {
- margin-top: 0;
- }
-
- /* bump up spacing above subheadings */
- h2 {
- margin-top: 40px !important;
- }
-
- /* print link URLs where possible and give links default text color */
- p a:after {
- content: " (" attr(href) ")";
- font-size: 80%;
- }
- p a {
- word-wrap: break-word;
- }
- a {
- color: inherit;
- }
-
- /* syntax highlighting rules */
- .str { color: #060; }
- .kwd { color: #006; font-weight: bold; }
- .com { color: #600; font-style: italic; }
- .typ { color: #404; font-weight: bold; }
- .lit { color: #044; }
- .pun { color: #440; }
- .pln { color: #000; }
- .tag { color: #006; font-weight: bold; }
- .atn { color: #404; }
- .atv { color: #060; }
-}
-
-/* =============================================================================
- Columns
- ========================================================================== */
-
-@media screen, projection, print {
-.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
-}
-.wrap {
- margin: 0 auto;
- width: 940px;
- clear: both;
-}
-.cols {
- height: 1%;
- margin: 0 -1.533742331288343558282%;
- width: 103.06748466257669%}
-*+html .cols {
- margin-bottom: 20px;
-}
-.cols:after {
- clear: both;
- content: ' ';
- display: block;
- height: 0;
- visibility: hidden;
-}
-.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
-.col-13, .col-14, .col-15, .col-16 {
- display: inline;
- float: left;
- margin-left: 10px;
- margin-right: 10px;
-}
-/*
-* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
-.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12 {
- margin: 0;
- padding: 0 1.4% 20px;
-}
-[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
-[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
-[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
- float: right;
-}
-*/
-.col-1 { width: 40px }
-.col-2 { width: 100px }
-.col-3 { width: 160px }
-.col-4 { width: 220px }
-.col-5 { width: 280px }
-.col-6 { width: 340px }
-.col-7 { width: 400px }
-.col-8 { width: 460px }
-.col-9 { width: 520px }
-.col-10 { width: 580px }
-.col-11 { width: 640px }
-.col-12 { width: 700px }
-.col-13 { width: 760px }
-.col-14 { width: 820px }
-.col-15 { width: 880px }
-.col-16 { width: 940px }
-}
-
-.col-right {
- margin-right:0px;
-}
-
-@media screen and (max-width:772px) {
-.col-5, .col-6, .col-7 {
- clear: both;
- width: 97.0238096%}
-}
-
-/* =============================================================================
- Layout
- ========================================================================== */
-@media screen, projection, print {
-
-/* --------------------------------------------------------------------------
-Header, Login, Nav-X, Search
-*/
-#header {
- padding: 2.2em 0 0.2em 0;
-}
-#header:before, #header:after {
- content: "";
- display: table;
- clear: both
-}
-.logo, .nav-x {
- float: left;
-}
-.nav-x {
- margin-top: -2px;
- list-style-type: none;
-}
-.nav-x a {
- color: #333;
- font-size: 16px;
-}
-.design a.selected {
- color: #33b5e5;
-}
-.develop a.selected {
- color: #F80;
-}
-.distribute a.selected {
- color: #9C0;
-}
-
-
-
-.nav-x li {
- display: inline;
- margin-right: 45px;
-}
-.search {
- float: right;
- position: relative;
- width: 220px
-}
-.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a3a3a3;
-}
-.search .bottom {
- width: 220px;
- height: 1px;
- top: 24px;
- left: 0
-}
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-.search .left { top: 19px; left: 0 }
-.search .right { top: 19px; right: 0 }
-.search form {
- float: left;
- margin-top: 2px;
- width: inherit;
-}
-.search .close,
-#player-frame .close {
- position: absolute;
- right: 8px;
- bottom: 4px;
- width: 16px;
- height: 16px;
- margin: 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
- z-index:9999;
-}
-.search .close:hover, .search .close:focus,
-#player-frame .close:hover, #player-frame .close:focus {
- background-position: -16px 0;
- cursor:pointer;
-}
-#player-frame .close {
- top: 6px;
-}
-.search form input {
- color: #999;
- font-size: 1em;
- width: inherit;
- border: none;
- margin: 0;
- padding:0 0 0 6px;
- z-index: 1500;
- background-color: transparent
-}
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-.search:hover .icon {
- background-position: -8px 0
-}
-.search form input:focus {
- color: #222;
- font-weight: bold;
- outline:0;
-}
-/* Search Dropdown */
-.search-dropdown {
- padding: 15px;
- width: 192px;
- border: solid 1px #c5c5c5;
- background: #fff;
- position: absolute;
- top: 35px;
- left: 0;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- box-shadow: 0 0 10px rgba(0,0,0,0.2)
-}
-.search-dropdown ul, .search-dropdown ul li {
- list-style-type: none;
- margin: 0;
- padding: 0
-}
-.search-dropdown ul li {
- clear: both
-}
-.search-dropdown img {
- float: left;
- margin: 0 10px 10px 0
-}
-.search-dropdown h6 {
- color: #222;
- margin: 0;
- line-height: normal
-}
-.search-dropdown .desc {
- color: #999;
- font-size: 11.5px;
- line-height: normal;
- margin: 0;
-}
-.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
- color: #33b5e5
-}
-/* --------------------------------------------------------------------------
-Buttons
-*/
-.button, a.button, .button-secondary, a.button-secondary {
- border-image: initial;
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- cursor: pointer;
-}
-.button, a.button {
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#0099cc',GradientType=0);
- border: 1px solid #3990ab;
- color: #fff;
-}
-.button-secondary, a.button-secondary {
- background-color: #f3f3f3;
- border: 1px solid #dcdcdc;
- color: #444;
-}
-a.button, a.button:visited, a.button-secondary, a.button-secondary:visited {
- height: 28px;
- line-height: 28px;
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 8px 15px;
- text-align: center;
-}
-.button, .button-secondary {
- height: 34px;
- line-height: 34px;
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 0 15px;
- text-align: center;
-}
-.button:hover, a.button:hover {
- border-color: #09c;
- background-color: #4cadcb;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5dbcd9), to(#4cadcb));
- background-image: -webkit-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -moz-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -ms-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -o-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: linear-gradient(top, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9',
-EndColorStr='#4cadcb',GradientType=0);
- color: #fff !important;
-}
-.button:active, a.button:active {
- background-color: #1e799a;
- background-image: none;
- border-color: #30b7e6;
-}
-.button-secondary:hover, a.button-secondary:hover {
- border-color: #dbdbdb;
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5 !important;
-}
-.button-secondary:active, a.button-secondary:active {
- border-color: #dadada;
- background: #ebebeb; /* Old browsers */
- /* IE9 SVG, needs conditional override of 'filter' to 'none' */
- background:
-url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/
-Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0Jv
-eD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+
-CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIg
-eDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJl
-YiIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZhZmFmYSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNmY2ZjYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFy
-R3JhZGllbnQ+
-CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIg
-Lz4KPC9zdmc+);
- background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
-#ffffff 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
-color-stop(5%,#f9f9f9), color-stop(50%,#fafafa), color-stop(90%,#f9f9f9), color-stop(100%,#ffffff));
-/* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
-90%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* IE10+ */
- background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
-endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- color: #258AAF !important;
-}
-.button.big {
- font-size:20px;
- display:inline-block;
-}
-
-.button.disabled,
-.button.disabled:hover,
-.button.disabled:active {
- background:#ebebeb;
- color:#999;
- border-color:#999;
- cursor:default;
-}
-
-.training-nav-top a.button-secondary,
-.training-nav-bottom a.button-secondary {
- display:block;
- float:left;
- margin:0;
- width:130px;
- text-transform:uppercase;
- font-weight:bold;
-
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
-}
-
-.training-nav-top a.button-secondary:hover,
-.training-nav-bottom a.button-secondary:hover {
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990ab;
- color: #fff !important;
-}
-
-.training-nav-top a.button-secondary.last,
-.training-nav-bottom a.button-secondary.last {
- border-left:0;
-}
-
-.training-nav-top a.button-secondary.double-size,
-.training-nav-bottom a.button-secondary.double-size {
- width:291px;
-}
-
-.training-nav-top,
-.training-nav-bottom {
- float:right;
- margin:0 0 0 20px;
-}
-
-.training-nav-bottom {
- padding:0 0 20px;
-}
-
-#tb-wrapper,
-#qv-wrapper {
- float:right;
- clear:right;
- margin:-27px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
- padding:0 0 20px;
-}
-
-#tb,
-#qv {
- font-size:13px;
- line-height:18px;
- width:238px;
- border:1px solid #ccc;
- float:right;
-}
-
-#tb {
- width:278px;
-}
-
-#tb h2,
-#qv h2 {
- margin:10px 15px;
- padding:0;
- text-transform:uppercase;
- border-bottom:1px solid gainsboro;
-}
-
-#tb *,
-#qv * {
- font-size:inherit;
-}
-
-#tb .download-box {
- padding:0 0 0 15px;
-}
-
-#tb .download-box .filename {
- font-size:11px;
- margin:4px 4px 10px;
- color:#666;
-}
-
-
-/* Dev guide quicknav */
-
-.sidebox-wrapper {
- float:right;
- clear:right;
- margin:0 0 0 20px;
- padding:0 0 20px;
-}
-
-.sidebox {
- width:226px;
- font-size:13px;
- line-height:18px;
- border-left:4px solid #99CC00;
- float:right;
- padding:0 0 0 10px;
-}
-
-.sidebox h2,
-.sidebox h3,
-.sidebox h4,
-.sidebox h5 {
- font-weight:bold;
- margin:0 0 10px;
-}
-
-.sidebox * {
- font-size:inherit;
-}
-
-#tb ol,
-#tb ul,
-#qv ul {
- margin:0 15px 10px 35px;
-}
-
-#qv ol {
- list-style:none;
- margin:0 15px 15px;
- font-size:inherit;
- line-height:inherit;
-}
-
-#tb ol ol,
-#tb ul ul,
-#qv ol ol,
-#qv ul ul,
-.sidebox ol ol,
-.sidebox ul ul {
- margin-bottom:0;
-}
-
-#qv ol ol {
- margin:3px 0 3px 15px;
-}
-
-.sidebox p,
-#qv p,
-#tb p {
- margin: 0 0 10px;
-}
-
-
-/* --------------------------------------------------------------------------
-Form
-*/
-.article form {
- margin: 0 0 20px;
-}
-.article form .form-required {
- color: #dd4b39;
-}
-.article form fieldset {
- margin: 0 0 20px;
- padding: 0;
-}
-.article form legend {
- display: block;
- line-height: 1.5;
- margin: 0;
- padding: 0;
-}
-/*
-.article form ol, .article form ul {
- margin: 0 0 0 1em;
- padding: 0 0 0 1em;
-}
-[dir='rtl'] .article form ol, [dir='rtl'] .article form ul {
- margin: 0 1em 0 0;
- padding: 0 1em 0 0;
-}
-.article form ol ul, .article form ul ul, [dir='rtl'] .article form ol ul, [dir='rtl'] .article form
-ul ul {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-.article form li {
- margin: 0 0 20px;
-}
-.article form li li {
- margin: 0 0 5px;
-}
-*/
-.article form label {
- display: block;
- margin: 0 0 5px;
- padding: 0;
-}
-.article form input[type='text'], .article form select, .article form textarea, .article form
-.checkbox-group, .article form .radio-group {
- margin-bottom: 15px;
-}
-.checkbox-group input {
- width: 13px;
- height: 13px;
- background: #fff;
- border: solid 1px #c6c6c6;
- float: left;
-}
-.article form .checkbox-group, .article form .radio-group {
- display: block
-}
-.article form select {
- border: solid 1px #ebebeb;
- border-top-color: #ddd;
- -webkit-appearance: none;
- background: #f3f3f3 url(../images/arrows-up-down.png) right center no-repeat;
- height: 30px;
- color: #222;
- line-height: normal;
- padding: 5px;
- width: 130px;
-}
-
-.article form .browse .browse-msg {
- font-size: 11.5px;
-}
-.article form .browse .button-secondary {
- height: auto;
- line-height: 25px;
- font-size: 11px;
- padding: 0 8px;
- margin: 0 10px 15px 0;
-}
-.article form input[type='text'], .article form textarea {
- border: 1px solid #ebebeb;
- border-top-color: #dcdcdc;
- color: #222;
- line-height: normal;
- padding: 6px 10px;
- width: 300px;
-}
-.article form textarea {
- height: 150px;
-}
-.article form input[type='text']:focus, .article form textarea:focus {
- border-color: #33B5E5;
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- -o-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- outline: 0;
-}
-.article form input[disabled], .article form textarea[disabled], .article form label.form-disabled {
- color: #999;
-}
-.article form input[type='text'][disabled], .article form textarea[disabled] {
- background-color: #ebebeb;
-}
-form .form-error input[type='text'], form .form-error textarea {
- border-color: #dd4b39;
- margin-right: 20px;
-}
-.aside {
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- margin: 10px 0;
- padding: 20px;
- color: #666;
- position: relative;
- background: #f9f9f9;
-}
-/*
-.aside, .notification, .promo {
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- margin: 10px 0;
- padding: 10px;
- position: relative;
-}
-.aside>:first-child, .notification>:first-child, .promo>:first-child {
- margin-top: 0;
-}
-.aside>:last-child, .notification>:last-child, .promo>:last-child {
- margin-bottom: 0;
-}
-.aside {
- background: #f9f9f9;
-}
-.notification {
- background: #fffbe4;
- border-color: #f8f6e6;
-}
-.promo {
- background: #f6f9ff;
- border-color: #eff2f9;
-}
-*/
-/* --------------------------------------------------------------------------
-Code Style
-*/
-pre {
- margin: 1em 0;
- padding: 1em;
- overflow: auto;
- border: solid 1px #ddd;
- background: #f7f7f7;
-}
-.str { color: #080; }
-.kwd { color: #008; }
-.com { color: #800; }
-.typ { color: #606; }
-.lit { color: #066; }
-.pun { color: #660; }
-.pln { color: #000; }
-.tag { color: #008; }
-.atn { color: #828; }
-.atv { color: #080; }
-.dec { color: #606; }
-
-/* --------------------------------------------------------------------------
-Three-Pane
-*/
-/* Package Nav & Classes Nav */
-.three-pane {
- position: relative;
- border-top: solid 1px #ebebeb;
-}
-#packages-nav .js-pane,
-#classes-nav .js-pane {
- overflow:visible;
-}
-#packages-nav {
- height:270px;
- max-height: inherit;
- overflow: hidden;
- position: relative;
-}
-#classes-nav {
- overflow: hidden;
- position: relative;
-}
-#packages-nav ul, #classes-nav ul {
- list-style-type: none;
- margin: 10px 0 20px 0;
- padding: 0;
-}
-#classes-nav li {
- font-weight: bold;
- margin: 5px 0;
-}
-#packages-nav li,
-#classes-nav li li {
- margin: 0;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li a, #classes-nav li a:active, #classes-nav li a:visited {
- padding: 0 0 0 4px;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited,
-#nav-tree li a, #nav-tree li a:active, #nav-tree li a:visited {
- color: #222;
- font-weight: normal;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited {
- display: block;
-}
-#packages-nav li.selected a, #packages-nav li.selected a:active, #packages-nav li.selected
-a:visited,
-#classes-nav li li.selected a, #classes-nav li li.selected a:active, #classes-nav li li.selected
-a:visited,
-#nav-tree li div.selected {
- font-weight: 500;
- color: #0099cc;
- background-color:#fff; }
- #packages-nav li.selected ul li a,
- #classes-nav li.selected ul li a {
- /* don't highlight child items */
- color: #555555; }
-#nav-tree li div.selected a {
- font-weight: 500;
- color: #0099cc;
-}
-#nav-swap {
- height:30px;
- border-top:1px solid #ccc;
-}
-#nav-swap a {
- display:inline-block;
- height:100%;
- color: #222;
- font-size: 12px;
- padding: 5px 0 5px 5px;
-}
-
-#nav-swap .fullscreen {
- float: right;
- width: 24px;
- height: 24px;
- text-indent: -1000em;
- padding:0;
- margin:3px 5px 0;
- background: url(../images/fullscreen.png) no-repeat -24px 0;
-}
-#nav-swap .fullscreen.disabled {
- background-position: 0 0;
-}
-#nav-swap .fullscreen:hover,
-#nav-swap .fullscreen:focus {
- cursor:pointer;
-}
-
-
-/* nav tree */
-#side-nav, #devdoc-nav, #swapper,
-#nav-tree, #tree-list {
- overflow:hidden;
- margin-left:0;
-}
-
-#nav-tree ul {
- list-style:none;
- padding:0;
- margin:10px 0;
-}
-
-#nav-tree ul li div {
- padding:0 0 0 4px;
-}
-
-#side-nav #nav-tree ul li a,
-#side-nav #nav-tree ul li span.no-children {
- padding: 0;
- margin: 0;
-}
-
-#nav-tree .plus {
- margin: 0 3px 0 0;
-}
-
-#nav-tree ul ul {
- list-style: none;
- margin: 0;
- padding: 0 0 0 0;
-}
-
-#nav-tree ul li {
- margin: 0;
- padding: 0 0 0 0;
- white-space: nowrap;
-}
-
-#nav-tree .children_ul {
- padding:0;
- margin:0;
-}
-#nav-tree .children_ul li div {
- padding:0 0 0 10px;
-}
-#nav-tree .children_ul .children_ul li div {
- padding:0 0 0 20px;
-}
-
-#nav-tree a.nolink {
- color: #222;
- text-decoration: none;
-}
-
-#nav-tree span.label {
- width: 100%;
-}
-
-#nav-tree {
- overflow-x: auto;
- overflow-y: scroll;
- outline:0;
-}
-
-
-/* Content */
-#doc-col {
- margin-right:0;
-}
-#doc-content-container {
- margin-left: 291px
-}
-#doc-header, #doc-content {
- padding: 1em 2em;
-}
-#doc-header {
- background: #f7f7f7;
-}
-#doc-header h1 {
- line-height: 0;
- margin-bottom: 15px;
-}
-#api-info-block {
- float: right;
- font-weight: bold;
-}
-#api-info-block a, #api-info-block a:active, #api-info-block a:visited {
- color: #222;
-}
-#api-info-block a:hover, #api-info-block a:focus {
- color: #33B5E5;
-}
-#api-nav-header {
- height:19px; /* plus 16px padding = 35; same as #nav li */
- font-size:14px;
- padding: 8px 0;
- margin: 0;
- border-bottom: 1px solid #CCC;
- background:#e9e9e9;
- background: rgba(0, 0, 0, 0.05); /* matches #nav li.expanded */
-
-}
-#api-nav-title {
- padding:0 5px;
- white-space:nowrap;
-}
-
-#api-level-toggle {
- float:right;
- padding:0 5px;
-}
-
-#api-level-toggle label {
- margin:0;
- vertical-align:top;
- line-height: 19px;
- font-size:13px;
- height: 19px;
-}
-
-#api-level-toggle .select-wrapper {
- width: 35px;
- display: inline-block;
- overflow: hidden;
-}
-#api-level-toggle select {
- border: 0;
- appearance:none;
- -moz-appearance:none;
- -webkit-appearance: none;
- background: transparent url(../images/arrows-up-down.png) 23px 5px no-repeat;
- color: #222;
- height: 19px;
- line-height: 19px;
- padding: 0;
- margin:1px 0 0 0;
- width:150%;
- font-size:13px;
- vertical-align:top;
- outline:0;
-}
-
-
-/* Toggle for revision notes and stuff */
-div.toggle-content.closed .toggle-content-toggleme {
- display:none;
-}
-
-#jd-content img.toggle-content-img {
- margin:0 5px 5px 0;
-}
-div.toggle-content p {
- margin:10px 0 0;
-}
-div.toggle-content-toggleme {
- padding:0 0 0 15px;
-}
-
-
-/* API LEVEL FILTERED MEMBERS */
-
-.absent,
-.absent a:link,
-.absent a:visited,
-.absent a:hover,
-.absent * {
- color:#bbb !important;
- cursor:default !important;
- text-decoration:none !important;
-}
-#devdoc-nav li.absent.selected,
-#devdoc-nav li.absent.selected *,
-#devdoc-nav div.label.absent.selected,
-#devdoc-nav div.label.absent.selected * {
- background-color:#eaeaea !important;
-}
-.absent h4.jd-details-title,
-.absent h4.jd-details-title * {
- background-color:#f6f6f6 !important;
-}
-.absent img {
- opacity: .3;
- filter: alpha(opacity=30);
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
-}
-
-
-
-
-
-
-
-
-
-/* JQUERY RESIZABLE STYLES */
-.ui-resizable { position: relative; }
-.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; z-index:1; }
-.ui-resizable .ui-resizable-handle { display: block; border-bottom: 1px solid #e4e4e4; }
-/*body .ui-resizable-disabled .ui-resizable-handle { display: none; }
-body .ui-resizable-autohide .ui-resizable-handle { display: none; }*/
-.ui-resizable-s { cursor: s-resize; height: 10px; width: 100% !important; bottom: -11px; left: 0;
-border-bottom: solid 1px #ededed;
- background: #f7f7f7 url("../images/resizable-s2.png") no-repeat scroll center center; }
-/*
-.ui-resizable-e {
-cursor: e-resize; width: 10px; right: 0; top: 0; height: 100%; border-right: solid
-1px #ededed;background: #f7f7f7 url("../images/resizable-e2.png") no-repeat scroll center center; }
-*/
-
-/* --------------------------------------------------------------------------
-Lightbox
-*/
-.lightbox {
- width: 769px;
- padding: 1.5em;
- margin: 0 auto;
- border: solid 1px #dcdcdc;
- background: #fff;
- -moz-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- box-shadow: 1px 1px 5px rgba(0,0,0,0.1)
-}
-.lightbox .header {
- float: left;
- width: 720px;
- margin: -10px 20px 10px 0;
-}
-.lightbox .close {
- float: right;
- width: 10px;
- height: 10px;
- margin: -10px -10px 10px 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
-}
-.lightbox .close:hover, .lightbox .close:focus {
- background-position: -10px 0;
-}
-
-/* --------------------------------------------------------------------------
-Misc
-*/
-
-
-.clearfix:before, .clearfix:after {
- content: "";
- display: table
-}
-.clearfix:after {
- clear: both
-}
-.clearfix {
- *zoom: 1
-}
-table.blank th, table.blank td {
- border: 0;
- background: none
-}
-.caption {
- margin: 0.5em 0 2em 0;
- color: #000;
- font-size: 11.5px;
-}
-
-.nolist {
- list-style:none;
- margin-left:0;
-}
-
-
-pre.classic {
- background-color:transparent;
- border:none;
- padding:0;
-}
-
-p.img-caption {
- margin: -10px 0 20px;
- font-size:13px;
- color:#666;
-}
-
-div.figure {
- float:right;
- clear:right;
- margin:10px 0 0 0;
- padding:0 0 0 20px;
- /* width must be defined w/ an inline style matching the image width */
-}
-
-p.table-caption {
- margin: 0 0 4px 0; /* matches default table left-margin */
- font-size:13px;
- color:#666;
-}
-
-div.note,
-div.caution,
-div.warning {
- margin: 0 0 15px;
-}
-
-p.note, div.note,
-p.caution, div.caution,
-p.warning, div.warning {
- padding: 0 0 0 10px;
- border-left: 4px solid;
-}
-
-p.note {
- border-color: #258AAF;
-}
-
-p.caution {
- border-color: #FF8800;
-}
-
-p.warning {
- border-color: #ff4443;
-}
-
-div.note.design {
- border-left: 4px solid #33B5E5;
-}
-
-div.note.develop {
- border-left: 4px solid #F80;
-}
-
-div.note.distribute {
- border-left: 4px solid #9C0;
-}
-
-.note p, .caution p, .warning p {
- margin:0 0 5px;
-}
-
-.note p:last-child, .caution p:last-child, .warning p:last-child {
- margin-bottom:0;
-}
-
-blockquote {
- display:block;
- float:right;
- width:280px;
- font-size:20px;
- font-style:italic;
- line-height:24px;
- color:#33B5E5;
- margin:0 0 20px 30px;
-}
-
-div.design-announce p {
- margin:0 0 10px;
-}
-
-#devdoc-nav a.totop {
- display:block;
- top:0;
- width:inherit;
- background: transparent url(../images/styles/gototop.png) no-repeat scroll 50% 50%;
- text-indent:-9999em;
-}
-#devdoc-nav a.totop {
- position:fixed;
- display:none;
-}
-#devdoc-nav a.totop:hover {
- background-color:#33B5E5;
-}
-
-.content-footer a.totop {
- text-transform:uppercase;
- line-height:30px;
-}
-
-/* -----------------------------------------------
-Dialog box for popup messages
-*/
-
-div.dialog {
- height:0;
- margin:0 auto;
-}
-
-div.dialog>div {
- z-index:99;
- position:fixed;
- margin:70px 0;
- width: 391px;
- height: 200px;
- background: #F7F7F7;
--moz-box-shadow: 0 0 15px rgba(0,0,0,0.5);
--webkit-box-shadow: 0 0 15px rgba(0,0,0,0.5);
-box-shadow: 0 0 15px rgba(0,0,0,0.5);
-}
-/* IE6 can't position fixed */
-* html div.dialog div { position:absolute; }
-
-
-div#deprecatedSticker {
- display:none;
- z-index:99;
- position:fixed;
- right:15px;
- top:114px;
- margin:0;
- padding:1em;
- background:#FFF;
- border:1px solid #dddd00;
- box-shadow:-5px 5px 10px #ccc;
- -moz-box-shadow:-5px 5px 10px #ccc;
- -webkit-box-shadow:-5px 5px 10px #ccc;
-}
-
-div#naMessage {
- display:none;
- width:555px;
- height:0;
- margin:0 auto;
-}
-
-div#naMessage div {
- z-index:99;
- width:450px;
- position:fixed;
- margin:50px 0;
- padding:4em 4em 3em;
- background:#FFF;
- border:1px solid #999;
- box-shadow:-10px 10px 40px #888;
- -moz-box-shadow:-10px 10px 40px #888;
- -webkit-box-shadow:-10px 10px 40px #888;
-}
-/* IE6 can't position fixed */
-* html div#naMessage div { position:absolute; }
-
-div#naMessage strong {
- font-size:1.1em;
-}
-
-
-/* --------------------------------------------------------------------------
-Slideshow Controls & Next/Prev
-*/
-.slideshow-next, .slideshow-prev {
- width: 20px;
- height: 36px;
- text-indent: -1000em;
-}
-.slideshow-container {
- margin: 2em 0;
-}
-.slideshow-container:before, .slideshow-container:after {
- content: "";
- display: table;
- clear: both;
-}
-a.slideshow-next, a.slideshow-next:visited {
-
- float: right;
-
- background: url(../images/arrow-right.png) no-repeat 0 0
-
-}
-
-a.slideshow-prev, a.slideshow-prev:visited {
-
- float: left;
-
- background: url(../images/arrow-left.png) no-repeat 0 0
-
-}
-
-.slideshow-next:hover, .slideshow-prev:hover, .slideshow-next:focus, .slideshow-prev:focus {
-
- background-position: 0 -36px
-
-}
-
-.slideshow-next:active, .slideshow-prev:active {
-
- background-position: 0 -72px
-
-}
-.slideshow-nav {
- width: 74px;
- margin: 0 auto;
-}
-.slideshow-nav a, .slideshow-nav a:visited {
- display: inline-block;
- width: 12px;
- height: 12px;
- margin: 0 2px 20px 2px;
- background: #ccc;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
-}
-.slideshow-nav a:hover, .slideshow-nav a:focus {
-
- background: #33B5E5
-}
-
-.slideshow-nav a:active {
-
- background: #1e799a;
- background: #ebebeb;
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
-}
-.slideshow-nav a.active, .slideshow-nav a.active:active, .slideshow-nav a.active:visited {
- background: #33B5E5
-}
-/* --------------------------------------------------------------------------
-Tabs
-*/
-ul.tabs {
- padding: 0;
- margin: 2em 0 0 0;
-}
-ul.tabs:before, ul.tabs:after {
- content: "";
- display: table;
- clear: both;
-}
-ul.tabs li {
- list-style-type: none;
- float: left;
-}
-ul.tabs li a, ul.tabs li a:active, ul.tabs li a:visited {
- display: block;
- height: 36px;
- line-height: 36px;
- padding: 0 15px;
- margin-right: 2px;
- color: #222;
- -moz-border-radius-topleft: 2px;
- -moz-border-radius-topright: 2px;
- -moz-border-radius-bottomright: px;
- -moz-border-radius-bottomleft: px;
- -webkit-border-radius: 2px 2px px px;
- border-radius: 2px 2px px px;
- border-top: solid 1px #ebebeb;
- border-left: solid 1px #ebebeb;
- border-right: solid 1px #ebebeb;
- background-color: #fff;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#fafafa));
- background-image: -webkit-linear-gradient(top, #ffffff, #fafafa);
- background-image: -moz-linear-gradient(top, #ffffff, #fafafa);
- background-image: -ms-linear-gradient(top, #ffffff, #fafafa);
- background-image: -o-linear-gradient(top, #ffffff, #fafafa);
- background-image: linear-gradient(top, #ffffff, #fafafa);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff',
-EndColorStr='#fafafa');
-}
-ul.tabs li a:hover {
- color: #33B5E5;
-}
-ul.tabs li a.selected {
- height: 37px;
- color: #33B5E5;
- background-color: #f7f7f7;
- background-image: none;
- border-color: #ddd;
-}
-.tab-content {
- padding: 1.2em;
- margin: -1px 0 2em 0;
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- border: solid 1px #ddd;
- background: #f7f7f7;
-}
-/* --------------------------------------------------------------------------
-Feature Boxes
-*/
-.feature-box {
- width: 291px;
- height: 200px;
- position: relative;
- background: #F7F7F7;
-}
-.box-border .top, .box-border .bottom, .box-border .left, .box-border .right {
- z-index: 100;
- position: absolute;
- background-color: #aaa;
-}
-.box-border .top, .box-border .bottom {
- width: 291px;
- height: 1px;
-}
-.dialog .box-border .top,
-.dialog .box-border .bottom { width:391px; }
-
-.box-border .left, .box-border .right {
- width: 1px;
- height: 8px;
-}
-.box-border .top { top: 0; left: 0 }
-.box-border .top .left { top: 1px; left: 0 }
-.box-border .top .right { top: 1px; right: 0 }
-.box-border .bottom .left { top: -8px; left: 0 }
-.box-border .bottom { top: 200px; left: 0 }
-.box-border .bottom .right { top: -8px; right: 0 }
-
-.feature-box h4,
-.dialog h4 {
- margin: 15px 18px 10px;
- padding:0;
-}
-
-.feature-box p,
-.dialog p {
- margin: 10px 18px;
- padding:0;
-}
-.feature-box .link,
-.dialog .link {
- border-top: 1px solid #dedede;
- bottom: 0;
- position: absolute;
- width: inherit;
-}
-.feature-box a, .feature-box h4,
-.dialog a, .dialog h4 {
- -webkit-transition: color .4s ease;
- -moz-transition: color .4s ease;
- -o-transition: color .4s ease;
- transition: color .4s ease;
-}
-.feature-box:hover {
- cursor: pointer;
-}
-.feature-box:hover .box-border .top, .feature-box:hover .box-border .bottom, .feature-box:hover
-.left, .feature-box:hover .right {
- background-color: #33B5E5;
-}
-.feature-box:hover h4, .feature-box:hover a {
- color: #33B5E5;
-}
-/* --------------------------------------------------------------------------
-Page-Specific Styles
-*/
-.colors {
- position: relative;
- float: left;
- width: 92px;
- margin: 40px 0 20px;
-}
-.colors div {
- color: #fff;
- font-size: 11.5px;
- width: 82px;
- height: 82px;
- margin-top:-30px;
- line-height: 82px;
- text-align: center;
- border: solid 5px #fff;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* ########### REFERENCE DOCS ################## */
-
-#packages-nav h2,
-#classes-nav h2 {
- font-size:18px;
- margin:0;
- padding:0 0 0 4px;
-}
-
-#jd-header {
- padding: 0 0 5px;
- margin: 20px 0 10px;
- font-size:13px;
- border-bottom:solid 1px #ccc;
-}
-
-#jd-header h1 {
- margin:0;
- padding:0;
-}
-
-/* page-top-right container for reference pages (holds
-links to summary tables) */
-#api-info-block {
- font-size:13px;
- margin:20px 0 0;
- padding:0 10px 6px;
- font-weight:normal;
- float:right;
- text-align:right;
- color:#999;
- max-width:70%;
-}
-
-#api-info-block div.api-level {
- font-weight:bold;
- font-size:inherit;
- float:none;
- color:#222;
- padding:0;
- margin:0;
-}
-
-/* inheritance table */
-.jd-inheritance-table {
- border-spacing:0;
- margin:0;
- padding:0;
- font-size:13px;
- background-color:transparent;
-}
-.jd-inheritance-table tr td {
- border: none;
- margin: 0;
- padding: 0;
- background-color:transparent;
-}
-.jd-inheritance-table .jd-inheritance-space {
- font-weight:bold;
- width:1em;
-}
-.jd-inheritance-table .jd-inheritance-interface-cell {
- padding-left: 17px;
-}
-
-
-
-.jd-sumtable a {
- text-decoration:none;
-}
-
-.jd-sumtable a:hover {
- text-decoration:underline;
-}
-
-/* the link inside a sumtable for "Show All/Hide All" */
-.toggle-all {
- display:block;
- float:right;
- font-weight:normal;
- font-size:0.9em;
-}
-
-/* adjustments for in/direct subclasses tables */
-.jd-sumtable.jd-sumtable-subclasses {
- margin: 1em 0 0 0;
- max-width:968px;
- background-color:transparent;
- font-size:13px;
-}
-
-/* extra space between end of method name and open-paren */
-.sympad {
- margin-right: 2px;
-}
-
-/* right alignment for the return type in sumtable */
-.jd-sumtable .jd-typecol {
- text-align:right;
-}
-
-/* adjustments for the expando table-in-table */
-.jd-sumtable-expando {
- margin:.5em 0;
- padding:0;
-}
-
-/* a div that holds a short description */
-.jd-descrdiv {
- padding:3px 1em 0 1em;
- margin:0;
- border:0;
-}
-
-#jd-content img.jd-expando-trigger-img {
- padding:0 4px 4px 0;
- margin:0;
-}
-
-.jd-sumtable-subclasses div#subclasses-direct,
-.jd-sumtable-subclasses div#subclasses-indirect {
- margin:0 0 0 13px;
-}
-
-
-
-/********* MEMBER REF *************/
-
-
-.jd-details {
-/* border:1px solid #669999;
- padding:4px; */
- margin:0 0 1em;
-}
-
-/* API reference: a container for the
-.tagdata blocks that make up the detailed
-description */
-.jd-details-descr {
- padding:0;
- margin:.5em .25em;
-}
-
-/* API reference: a block containing
-a detailed description, a params table,
-seealso list, etc */
-.jd-tagdata {
- margin:.5em 1em;
-}
-
-.jd-tagdata p {
- margin:0 0 1em 1em;
-}
-
-/* API reference: adjustments to
-the detailed description block */
-.jd-tagdescr {
- margin:.25em 0 .75em 0;
-}
-
-.jd-tagdescr ol,
-.jd-tagdescr ul {
- margin:0 2.5em;
- padding:0;
-}
-
-.jd-tagdescr table,
-.jd-tagdescr img {
- margin:.25em 1em;
-}
-
-.jd-tagdescr li {
-margin:0 0 .25em 0;
-padding:0;
-}
-
-/* API reference: heading marking
-the details section for constants,
-attrs, methods, etc. */
-h4.jd-details-title {
- font-size:1.15em;
- background-color: #E2E2E2;
- margin:1.5em 0 .6em;
- padding:3px 95px 3px 3px; /* room for api-level */
-}
-
-h4.jd-tagtitle {
- margin:0;
-}
-
-h4 .normal {
- font-weight:normal;
-}
-
-/* API reference: heading for "Parameters", "See Also", etc.,
-in details sections */
-h5.jd-tagtitle {
- margin:0 0 .25em 0;
- font-size:1em;
-}
-
-.jd-tagtable {
- margin:0;
- background-color:transparent;
- width:auto;
-}
-
-.jd-tagtable td,
-.jd-tagtable th {
- border:none;
- background-color:#fff;
- vertical-align:top;
- font-weight:normal;
- padding:2px 10px;
-}
-
-.jd-tagtable th {
- font-style:italic;
-}
-
-/* Inline api level indicator for methods */
-div.api-level {
- font-size:.8em;
- font-weight:normal;
- color:#999;
- float:right;
- padding:0 8px 0;
- margin-top:-30px;
-}
-
-table.jd-tagtable td,
-table.jd-tagtable th {
- background-color:transparent;
-}
-
-table.jd-tagtable th {
- color:inherit;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* SEARCH FILTER */
-
-#search_autocomplete {
- font-weight:normal;
-}
-
-#search_filtered_wrapper {
- width: 193px;
- float: right;
-}
-#search_filtered_div {
- position:absolute;
- z-index:9999;
- min-width:171px; /* +padding and border makes this match input width */
- padding:5px;
- border: solid 1px #C5C5C5;
- background: white;
- top: 35px;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
-}
-
-ul#search_filtered {
- min-width:100%;
- margin:0;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-
-#search_filtered li{
- line-height:1.5em;
- margin: 0 0 2px;
- padding: 0;
-}
-
-#search_filtered li a {
- padding:0 5px;
- color:#222 !important;
-}
-
-#search_filtered .jd-selected {
- background-color: #33B5E5;
- cursor:pointer;
-}
-#search_filtered .jd-selected,
-#search_filtered .jd-selected a {
- color:#f7f7f7 !important;
-}
-
-.no-display {
- display: none;
-}
-
-.jd-autocomplete {
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 1px;
- padding-bottom: 1px;
- font-size: 0.81em;
- border: none;
- margin: 0;
- line-height: 1.05em;
-}
-
-.show-item {
- display: table-row;
-}
-.hide-item {
- display: hidden;
-}
-
-
-
-
-
-/* SEARCH RESULTS */
-
-
-#leftSearchControl .gsc-twiddle {
- background-image : none;
-}
-
-#leftSearchControl td, #searchForm td {
- border: 0px solid #000;
- padding:0;
-}
-
-#leftSearchControl .gsc-resultsHeader .gsc-title {
- padding-left : 0px;
- font-weight : bold;
- font-size : 13px;
- color:#006699;
- display : none;
-}
-
-#leftSearchControl .gsc-resultsHeader div.gsc-results-selector {
- display : none;
-}
-
-#leftSearchControl .gsc-resultsRoot {
- padding-top : 6px;
-}
-
-#leftSearchControl div.gs-visibleUrl-long {
- display : block;
- color:#006699;
-}
-
-#leftSearchControl .gsc-webResult {
- padding:0 0 20px 0;
-}
-
-.gsc-webResult div.gs-visibleUrl-short,
-table.gsc-branding,
-.gsc-clear-button {
- display : none;
-}
-
-.gsc-cursor-box .gsc-cursor div.gsc-cursor-page,
-.gsc-cursor-box .gsc-trailing-more-results a.gsc-trailing-more-results,
-#leftSearchControl a,
-#leftSearchControl a b {
- color:#006699;
-}
-
-.gsc-resultsHeader {
- display: none;
-}
-
-/* Disable built in search forms */
-.gsc-control form.gsc-search-box {
- display : none;
-}
-table.gsc-search-box {
- margin:6px 0 0 0;
- border-collapse:collapse;
-}
-
-td.gsc-input {
- padding:0 2px;
- width:100%;
- vertical-align:middle;
-}
-
-input.gsc-input {
- border:1px solid #BCCDF0;
- width:99%;
- padding-left:2px;
- font-size:.95em;
-}
-
-td.gsc-search-button {
- text-align: right;
- padding:0;
- vertical-align:top;
-}
-
-
-#searchResults {
- overflow:hidden; /* because the repositioned page links makes the section think it needs to scroll
-(it doesn't) */
- height:auto;
-}
-
-#searchResults .gsc-control {
- position:relative;
- width:auto;
- padding:0 0 10px;
-}
-
-#searchResults .gsc-tabsArea {
- position:relative;
- white-space:nowrap;
- float:left;
- width:200px;
-}
-
-#searchResults .gsc-above-wrapper-area {
- display:none;
-}
-
-#searchResults .gsc-resultsbox-visible {
- float:left;
- width:720px;
- margin-left:20px;
-}
-
-#searchResults .gsc-tabHeader {
- padding: 3px 6px;
- position:relative;
- width:auto;
- display:block;
-}
-
-#searchResults h2#searchTitle {
- padding:0;
- margin:5px 0;
- border:none;
-}
-
-#searchResults h2#searchTitle em {
- font-style:normal;
- color:#33B5E5;
-}
-
-#searchResults .gsc-table-result {
- margin:5px 0 10px 0;
- background-color:transparent;
-}
-#searchResults .gs-web-image-box, .gs-promotion-image-box {
- width:120px;
-}
-#searchResults .gs-web-image-box img.gs-image, .gs-promotion-image-box img.gs-promotion-image {
- max-width:120px;
-}
-
-#searchResults .gsc-table-result .gsc-thumbnail {
- padding:0 20px 0 0;
-}
-
-#searchResults td {
- background-color:transparent;
-}
-
-#searchResults .gsc-expansionArea {
- position:relative;
-}
-#searchResults .gsc-tabsArea .gsc-cursor-box {
- width:200px;
- padding:20px 0 0 1px;
-}
-#searchResults .gsc-cursor-page {
- display:inline-block;
- float:left;
- margin:-1px 0 0 -1px;
- padding:0;
- height:27px;
- width:27px;
- text-align:center;
- line-height:2;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhInactive,
-#searchResults .gsc-cursor-page {
- text-decoration:none;
- color:#258AAF;
- border: solid 1px #DADADA;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhInactive:hover,
-#searchResults .gsc-cursor-page:hover {
- border-color: #DBDBDB;
- background-color: #F3F3F3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#ECECEC));
- background-image: -webkit-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -moz-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -ms-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -o-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: linear-gradient(top, #F9F9F9, #ECECEC);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhActive,
-#searchResults .gsc-tabHeader.gsc-tabhActive:hover,
-#searchResults .gsc-cursor-page.gsc-cursor-current-page,
-#searchResults .gsc-cursor-page.gsc-cursor-current-page:hover {
- color:#fff;
- background-color: #09C;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2FADDB), to(#09C));
- background-image: -webkit-linear-gradient(top, #2FADDB, #09C);
- background-image: -moz-linear-gradient(top, #2FADDB, #09C);
- background-image: -ms-linear-gradient(top, #2FADDB, #09C);
- background-image: -o-linear-gradient(top, #2FADDB, #09C);
- background-image: linear-gradient(top, #2FADDB, #09C);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990AB;
- z-index:100;
-}
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*********** PREVIOUSLY dac-styles.css ***************/
-
-
-
-
-
-::-webkit-selection,
-::-moz-selection,
-::selection {
- background-color: #0099cc;
- color: #fff; }
-
-#header {
- border-bottom:0;
-}
-
-#header .wrap {
- max-width:940px;
- height:41px;
- border-bottom:1px solid;
- border-color: #ccc;
- position:relative;
-}
-
-.about #header .wrap {
- border-color: #9933CC;
-}
-
-.design #header .wrap {
- border-color: #33b5e5;
-}
-
-.develop #header .wrap {
- border-color: #F80;
-}
-
-.distribute #header .wrap {
- border-color: #9C0;
-}
-
-.logo a {
- width:123px;
- float:left;
-}
-
-#header .logo {
- margin-top: -6px;
- margin-left: 0px;
- margin-bottom:0px;
- width: 160px;
- padding-right:10px;
-}
-
-.search {
- height:25px;
- margin-top: -3px;
- margin-bottom: 0px;
-}
-
-
-
-/* Quicknav */
-.btn-quicknav {
- width:20px;
- height:28px;
- float:left;
- margin-left:6px;
- padding-right:10px;
- position:relative;
- cursor:pointer;
- border-right:1px solid #CCC;
-}
-
-.btn-quicknav a {
- zoom:1;
- position:absolute;
- top:13px;
- left:5px;
- display:block;
- text-indent:-9999em;
- width:10px;
- height:5px;
- background:url(../images/quicknav_arrow.png) no-repeat;
-}
-
-.btn-quicknav a.arrow-active {
- background-position: 0 -5px;
- display:none;
-}
-
-#header-wrap.quicknav a.arrow-inactive {
- display:none;
-}
-
-.btn-quicknav.active a.arrow-active {
- display:block;
-}
-
-.nav-x li {
- display:block;
- float:left;
- margin-right:45px;
- -webkit-transition: all 0.25s linear;
- -moz-transition: all 0.25s linear;
- -ms-transition: all 0.25s linear;
- -o-transition: all 0.25s linear;
- transition: all 0.25s linear;
-}
-
-#header-wrap.quicknav .nav-x li {
- min-width:160px;
- margin-right:20px;
-}
-
-#header-wrap.quicknav li.last {
- margin-right:0px;
-}
-
-#quicknav {
- float:none;
- clear:both;
- margin-left:180px;
- margin-top:-30px;
- display:none;
- overflow:hidden;
-}
-
-#header-wrap.quicknav #quicknav {
-
-}
-
-#quicknav ul {
- margin:10px 0;
- padding:0;
-}
-
-#quicknav ul li.design {
- border-top:1px solid #33b5e5;
-}
-
-#quicknav ul li.develop {
- border-top:1px solid #FF8800;
-}
-
-#quicknav ul li.distribute {
- border-top:1px solid #99cc00;
-}
-
-#quicknav ul li {
- display:block;
- float:left;
- margin:0 20px 0 0;
- min-width:140px;
-}
-
-#quicknav ul li.last {
- margin-right:0px;
-}
-
-#quicknav ul li ul li {
- float:none;
-}
-
-#quicknav ul li ul li a {
- color:#222;
-}
-
-#quicknav ul li li ul,
-#quicknav ul li li ul li {
- margin:0;
-}
-
-#quicknav ul li li ul li:before {
- content:"\21B3";
-}
-
-#header-wrap {
- -webkit-transition: all 0.25s ease-out;
- -moz-transition: all 0.25s ease-out;
- -ms-transition: all 0.25s ease-out;
- -o-transition: all 0.25s ease-out;
- transition: all 0.25s ease-out;
-
-}
-
-#header-wrap.quicknav {
- height:170px;
-
-}
-
-/* SEARCH AND MORE */
-.search {
- position: absolute;
- width: 50px;
- height:28px;
- display: block;
- margin-top:-3px;
- margin-bottom:7px;
- overflow:hidden;
- z-index:100;
- right:54px;
- -webkit-transition: width 0.4s ease;
- -moz-transition: width 0.4s ease;
- -o-transition: width 0.4s ease;
- transition: width 0.4s ease;
-}
-
-.search #search-btn {
- width:50px;
- height:28px;
- background:url(../images/icon_search.png) no-repeat;
- float:left;
-}
-
-.search-inner {
- width:245px;
-}
-
-.search:hover, .search.active {
- width:245px;
-}
-
-.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a2a2a2
-}
-
-.search .bottom {
- width: 214px;
- height: 1px;
- top: 24px;
- left: 0
-}
-
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-
-.search .left {
- top: 22px;
- left: 56px;
- background-color:#CCC;
-}
-
-.search .right {
- top: 22px;
- left: 238px;
- background-color:#CCC;
-}
-
-.search form {
- margin-top: 2px;
- width: 162px;
- float:left;
-}
-
-.search form input {
- color: #2f2f2f;
- font-size: 0.95em;
- width: 178px;
- border: none;
- margin-left: 6px;
- z-index: 1500;
- position: relative;
- background-color: transparent;
- border-bottom:1px solid #CCC;
- padding:0 0 0 4px;
- outline:none;
- height:24px;
-}
-
-.search:hover form input {
- border-bottom:1px solid #33B5E5;
-}
-
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-
-.search:hover #search-btn {
- background-position: 0 -28px
-}
-
-.search form input:focus {
- color: #222;
- font-weight: bold
-}
-
-.moremenu {
- float: right;
- position: relative;
- width: 50px;
- height:28px;
- display: block;
- margin-top:-3px;
- margin-bottom:7px;
- overflow:hidden;
- -webkit-transition: width 0.25s ease;
- -moz-transition: width 0.25s ease;
- -o-transition: width 0.25s ease;
- transition: width 0.25s ease;
-}
-
-.moremenu #more-btn {
- width:40px;
- height:28px;
- background:url(../images/icon_more.png) no-repeat;
- border-left:1px solid #CCC;
- float:left;
- cursor:pointer;
-}
-
-.moremenu:hover #more-btn {
- background-position:0 -28px;
-}
-
-.morehover {
- position:absolute;
- right:6px;
- top:-9px;
- width:40px;
- height:35px;
- z-index:99;
- overflow:hidden;
-
- -webkit-opacity:0;
- -moz-opacity:0;
- -o-opacity:0;
- opacity:0;
-
- -webkit-transform-origin:100% 0%;
- -moz-transform-origin:100% 0%;
- -o-transform-origin:100% 0%;
- transform-origin:100% 0%;
-
- -webkit-transition-property: -webkit-opacity;
- -webkit-transition-duration: .25s;
- -webkit-transition-timing-function:ease;
-
- -moz-transition-property: -webkit-opacity;
- -moz-transition-duration: .25s;
- -moz-transition-timing-function:ease;
-
- -o-transition-property: -webkit-opacity;
- -o-transition-duration: .25s;
- -o-transition-timing-function:ease;
-
- -transition-property: -webkit-opacity;
- -transition-duration: .25s;
- -transition-timing-function:ease;
-}
-
-.morehover:hover {
- opacity:1;
- height:385px;
- width:268px;
- -webkit-transition-property:height, -webkit-opacity;
-}
-
-.morehover .top {
- width:268px;
- height:39px;
- background:url(../images/more_top.png) no-repeat;
-}
-
-.morehover .mid {
- width:228px;
- background:url(../images/more_mid.png) repeat-y;
- padding:10px 20px 0 20px;
-}
-
-.morehover .mid .header {
- border-bottom:1px solid #ccc;
- font-weight:bold;
-}
-
-.morehover .bottom {
- width:268px;
- height:6px;
- background:url(../images/more_bottom.png) no-repeat;
-}
-
-.morehover ul {
- margin:10px 10px 20px 0;
-}
-
-.morehover ul li {
- list-style:none;
-}
-
-.morehover ul li.active a,
-.morehover ul li.active a:hover {
- color:#222 !important;
-}
-
-.morehover ul li.active img {
- margin-right:4px;
-}
-
-
-
-
-/* MARQUEE */
-.slideshow-container {
- width:100%;
- overflow:hidden;
- position:relative;
-}
-.slideshow-container .slideshow-prev {
- position:absolute;
- top:50%;
- left:0px;
- margin-top:-36px;
- z-index:99;
-}
-.slideshow-container .slideshow-next {
- position:absolute;
- top:50%;
- margin-top:-36px;
- z-index:99;
- right:0px;
-}
-
-.slideshow-container .pagination {
- position:absolute;
- bottom:20px;
- width:100%;
- text-align:center;
- z-index:99;
-}
-.slideshow-container .pagination ul {
- margin:0;
-}
-.slideshow-container .pagination ul li{
- display: inline-block;
- width:12px;
- height:12px;
- text-indent:-8000px;
- list-style:none;
- margin: 0 2px;
- border-radius:6px;
- background-color:#ccc;
- cursor:pointer;
- -webkit-transition:color .5s ease-in;
- -moz-transition:color .5s ease-in;
- -o-transition:color .5s ease-in;
- transition:color .5s ease-in;
-}
-.slideshow-container .pagination ul li:hover {
- background-color:#999;
-}
-.slideshow-container .pagination ul li.active {
- background-color:#33b5e5;
-}
-.slideshow-container .pagination ul li.active:hover {
- background-color:#33b5e5;
-}
-.slideshow-container ul li {
- display:inline;
- list-style:none;
-}
-
-
-
-
-a.download-sdk {
- float:right;
- margin:-10px 0;
- height:30px;
- padding-top:4px;
- padding-bottom:0px;
-}
-
-#nav-x {
- padding-top: 14px;
-}
-
-#nav-x .wrap {
- min-height:34px;
-}
-
-#nav-x .wrap,
-#searchResults.wrap {
- max-width:940px;
- border-bottom:1px solid #CCC;
-}
-
-#searchResults.wrap #leftSearchControl {
- min-height:700px
-}
-.nav-x {
- margin-left:0;
- margin-bottom:0;
-}
-
-
-
-
-
-
-
-
-
-
-/*
- * CSS Styles that are needed by jScrollPane for it to operate correctly.
- */
-
-.jspContainer {
- overflow: hidden;
- position: relative;
-}
-
-.jspPane {
- position: absolute;
- overflow: hidden;
- width:auto !important; /* to avoid cut-off api names in reference in horiz scroll */
-}
-
-.jspVerticalBar {
- position: absolute;
- top: 0;
- right: 0;
- width: 4px;
- height: 100%;
- background: #f5f5f5;
-}
-
-.jspHorizontalBar {
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 4px;
- background: #f5f5f5;
-}
-
-.jspVerticalBar *,
-.jspHorizontalBar * {
- margin: 0;
- padding: 0;
-}
-.jspCap {
- display: block;
-}
-
-.jspVerticalBar .jspCap {
- height: 4px;
-}
-
-.jspHorizontalBar .jspCap {
- width: 0;
- height: 100%;
-}
-
-.jspHorizontalBar .jspCap {
- float: left;
-}
-
-.jspTrack {
- position: relative;
-}
-
-.jspDrag {
- background: #bbb;
- position: relative;
- top: 0;
- left: 0;
- cursor: pointer;
-}
-
-.jspDrag:hover,
-.jspDrag:active {
- border-color: #09c;
- background-color: #4cadcb;
- background-image: -webkit-gradient(linear, left top, right top, from(#5dbcd9), to(#4cadcb));
- background-image: -webkit-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -moz-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -ms-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -o-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: linear-gradient(left, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9', EndColorStr='#4cadcb');
-}
-
-.jspHorizontalBar .jspTrack,
-.jspHorizontalBar .jspDrag {
- float: left;
- height: 100%;
-}
-
-.jspArrow {
- background: #999;
- text-indent: -20000px;
- display: block;
- cursor: pointer;
-}
-
-.jspArrow.jspDisabled {
- cursor: default;
- background: #ccc;
-}
-
-.jspVerticalBar .jspArrow {
- height: 16px;
-}
-
-.jspHorizontalBar .jspArrow {
- width: 16px;
- float: left;
- height: 100%;
-}
-
-.jspVerticalBar .jspArrow:focus {
- outline: none;
-}
-
-.jspCorner {
- float: left;
- height: 100%;
-}
-
-/* Yuk! CSS Hack for IE6 3 pixel bug :( */
-* html .jspCorner {
- margin: 0 -3px 0 0;
-}
-/******* end of jscrollpane *********/
-
-
-
-
-
-/************ DEVELOP HOMEPAGE ******************/
-
-/* Slideshow */
-.slideshow-develop {
- height: 300px;
- width: 940px;
- position: relative;
- overflow:hidden;
-}
-.slideshow-develop .frame {
- width: 940px;
- height: 300px;
-}
-.slideshow-develop img.play {
- max-width:350px;
- max-height:240px;
- margin:20px 0 0 90px;
- -webkit-transform: perspective(800px ) rotateY( 35deg );
- box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
-}
-.slideshow-develop img.play.no-shadow {
- box-shadow: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
-}
-.slideshow-develop img.play.no-transform {
- -webkit-transform: none;
-}
-.slideshow-develop a.slideshow-next {
- background: url(../images/arrow-right-develop.png);
-}
-.slideshow-develop a.slideshow-prev {
- background: url(../images/arrow-left-develop.png);
-}
-.slideshow-develop .content-right {
- float: left;
-}
-.slideshow-develop .content-right p.title-intro {
- position:absolute;
- margin:0;
-}
-.slideshow-develop .content-right h2 {
- padding:0;
- margin-bottom:10px;
- border:none;
-}
-.slideshow-develop .item {
- height: 300px;
- width: 940px;
-}
-.slideshow-develop .pagination ul li.active {
- background-color: #F80;
-}
-.slideshow-develop .pagination ul li.active:hover {
- background-color: #F80;
-}
-
-/* Feeds */
-.feed ul {
- margin: 0;
-}
-.feed .feed-nav {
- height: 25px;
- border-bottom: 1px solid #CCC;
-}
-.feed .feed-nav li {
- list-style: none;
- float: left;
- height: 21px; /* +4px bottom border = 25px; same as .feed-nav */
- margin-right: 25px;
- cursor: pointer;
-}
-.feed .feed-nav li.active {
- color: #000;
- border-bottom: 4px solid #F80;
-}
-.feed .feed-container {
- overflow: hidden;
- width: 460px;
-}
-.feed .feed-container .feed-frame {
- width: 1000px;
-}
-.feed .feed-container .feed-frame ul {
- float: left;
- width:460px;
-}
-.feed .feed-container .feed-frame ul ul {
- float: none;
- margin:10px 0 0 30px;
-}
-.feed .feed-container .feed-frame li {
- list-style: none;
- margin: 20px 0 20px 0;
- width: 460px;
- height:93px;
-}
-.feed .feed-container .feed-frame li.playlist {
- height:auto;
-}
-.feed .feed-container .feed-frame li.playlist a {
- height:93px;
- display:block;
-}
-.feed .feed-container .feed-frame li.more {
- height:20px;
- margin:10px 0 5px 5px;
-}
-.feed .feed-container .feed-frame li.more a {
- height:inherit;
-}
-.feed .feed-container .feed-frame li.playlist-video {
- list-style: none;
- margin: 0;
- width: 460px;
- height:55px;
- font-size:12px;
-}
-.feed .feed-container .feed-frame li.playlist-video a {
- height:45px;
- padding:5px;
-}
-.feed .feed-container .feed-frame li.playlist-video h5 {
- font-size:12px;
- line-height:13px;
- margin:0;
-}
-.feed .feed-container .feed-frame li.playlist-video p {
- margin:5px 0 0;
- line-height:15px;
-}
-.feed-container .feed-frame div.feed-image {
- float: left;
- border: 1px solid #999;
- margin:0 20px 0 0;
- width:122px;
- height:92px;
- background:url('../images/blog-default.png') no-repeat 0 0;
- background-size:180px;
-}
-#jd-content .feed .feed-container .feed-frame li img {
- float: left;
- border: 1px solid #999;
- margin:0 20px 0 0;
- width:122px;
- height:92px;
-}
-#jd-content .feed .feed-container .feed-frame li.playlist-video img {
- width:inherit;
- height:inherit;
-}
-
-.feed .feed-container .feed-frame li a,
-.feed .feed-container .feed-frame li a:active {
- color:#555 !important;
-}
-
-.feed .feed-container .feed-frame li a:hover,
-.feed .feed-container .feed-frame li a:hover * {
- color:#7AA1B0 !important;
-}
-
-/* Video player */
-#player-wrapper {
- display:none;
- margin: -1px auto 0;
- position: relative;
- width: 940px;
- height: 0px;
-}
-#player-frame {
- background: #EFEFEF;
- border: 1px solid #CCC;
- padding: 0px 207px;
- z-index: 10; /* stay above marque, but below search suggestions */
- width: 525px;
- height: 330px;
- position: relative;
-}
-
-
-
-/************ DISTRIBUTE HOMEPAGE ***************/
-
-.marquee {
- width: 760px;
-}
-.marquee .main-img {
- float: left;
- margin-top: 20px;
- width: 490px;
-}
-.marquee .copy {
- width: 270px;
- float: left;
- margin-top: 30px;
-}
-.distribute-features {
- margin: 0;
-}
-.distribute-features ul {
- margin: 0;
-}
-.distribute-features ul li {
- list-style: none;
- float: left;
- border-top: 1px solid #9C0;
- width: 220px;
- margin-right: 50px;
-}
-.distribute-features ul li.last {
- margin-right: 0px;
-}
-
-
-/************ DEVELOP TOPIC CONTAINERS ************/
-
-.landing-banner,
-.landing-docs {
- margin:20px 0 0;
-}
-.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child,
-.landing-docs .col-12 {
- margin-left:0;
- min-height:280px;
-}
-.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child,
-.landing-docs .col-12 {
- margin-right:0;
-}
-
-.landing-banner h1 {
- margin-top:0;
-}
-.landing-docs {
- clear:left;
-}
-.landing-docs h3 {
- font-size:14px;
- line-height:21px;
- color:#555;
- text-transform:uppercase;
- border-bottom:1px solid #CCC;
- margin:0 0 20px;
-}
-.landing-docs a {
- color:#333 !important;
-}
-.landing-docs a:hover,
-.landing-docs a:hover * {
- color:#7AA1B0 !important
-}
-
-.plusone {
- float:right;
-}
-
-
-
-/************* HOME/LANDING PAGE *****************/
-
-.slideshow-home {
- height: 500px;
- width: 940px;
- border-bottom: 1px solid #CCC;
- position: relative;
- margin: 0;
-}
-.slideshow-home .frame {
- width: 940px;
- height: 500px;
-}
-.slideshow-home .content-left {
- float: left;
- text-align: center;
- vertical-align: center;
- margin: 0 0 0 35px;
-}
-.slideshow-home .content-right {
- margin: 80px 0 0 0;
-}
-.slideshow-home .content-right p {
- margin-bottom: 10px;
-}
-.slideshow-home .content-right p:last-child {
- margin-top: 15px;
-}
-.slideshow-home .content-right h1 {
- padding:0;
-}
-.slideshow-home .item {
- height: 500px;
- width: 940px;
-}
-.home-sections {
- padding: 30px 20px 20px;
- margin: 20px 0;
- background: -webkit-linear-gradient(top, #F6F6F6,#F9F9F9);
-}
-.home-sections ul {
- margin: 0;
-}
-.home-sections ul li {
- float: left;
- display: block;
- list-style: none;
- width: 170px;
- height: 35px;
- border: 1px solid #ccc;
- background: white;
- margin-right: 10px;
- border-radius: 1px;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- box-shadow: 1px 1px 5px #EEE;
- -webkit-box-shadow: 1px 1px 5px #EEE;
- -moz-box-shadow: 1px 1px 5px #EEE;
- background: white;
-}
-.home-sections ul li:hover {
- background: #F9F9F9;
- border: 1px solid #CCC;
-}
-.home-sections ul li a,
-.home-sections ul li a:hover {
- font-weight: bold;
- margin-top: 8px;
- line-height: 18px;
- float: left;
- width: 100%;
- text-align: center;
- color: #09c !important;
-}
-.home-sections ul li a {
- font-weight: bold;
- margin-top: 8px;
- line-height: 18px;
- float: left;
- width:100%;
- text-align:center;
-}
-.home-sections ul li img {
- float: left;
- margin: -8px 0 0 10px;
-}
-.home-sections ul li.last {
- margin-right: 0px;
-}
-#footer {
- margin-top: -40px;
-}
diff --git a/docs/html/guide/google/gcm/client-javadoc/deprecated-list.html b/docs/html/guide/google/gcm/client-javadoc/deprecated-list.html
deleted file mode 100644
index d9a63c5..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/deprecated-list.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-Deprecated List
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Deprecated List";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Deprecated API</B></H2>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-</UL>
-
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/help-doc.html b/docs/html/guide/google/gcm/client-javadoc/help-doc.html
deleted file mode 100644
index af1bca8..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/help-doc.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-API Help
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="API Help";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-How This API Document Is Organized</H1>
-</CENTER>
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
-Package</H3>
-<BLOCKQUOTE>
-
-<P>
-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
-<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
-</BLOCKQUOTE>
-<H3>
-Class/Interface</H3>
-<BLOCKQUOTE>
-
-<P>
-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
-<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
-<P>
-<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
-<P>
-<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Annotation Type</H3>
-<BLOCKQUOTE>
-
-<P>
-Each annotation type has its own separate page with the following sections:<UL>
-<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
-</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Enum</H3>
-<BLOCKQUOTE>
-
-<P>
-Each enum has its own separate page with the following sections:<UL>
-<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
-</BLOCKQUOTE>
-<H3>
-Tree (Class Hierarchy)</H3>
-<BLOCKQUOTE>
-There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
-<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
-</BLOCKQUOTE>
-<H3>
-Deprecated API</H3>
-<BLOCKQUOTE>
-The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
-<H3>
-Index</H3>
-<BLOCKQUOTE>
-The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
-<H3>
-Prev/Next</H3>
-These links take you to the next or previous class, interface, package, or related page.<H3>
-Frames/No Frames</H3>
-These links show and hide the HTML frames. All pages are available with or without frames.
-<P>
-<H3>
-Serialized Form</H3>
-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
-<P>
-<H3>
-Constant Field Values</H3>
-The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
-<P>
-<FONT SIZE="-1">
-<EM>
-This help file applies to API documentation generated using the standard doclet.</EM>
-</FONT>
-<BR>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/index-all.html b/docs/html/guide/google/gcm/client-javadoc/index-all.html
deleted file mode 100644
index 408edee..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/index-all.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-Index
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="./default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Index";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A> <HR>
-<A NAME="_C_"><!-- --></A><H2>
-<B>C</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#checkDevice(Context)"><B>checkDevice(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Checks if the device has the proper dependencies installed.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#checkManifest(Context)"><B>checkManifest(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Checks that the application manifest is properly configured.
-<DT><A HREF="./com/google/android/gcm/package-summary.html"><B>com.google.android.gcm</B></A> - package com.google.android.gcm<DD>&nbsp;</DL>
-<HR>
-<A NAME="_D_"><!-- --></A><H2>
-<B>D</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#DEFAULT_INTENT_SERVICE_CLASS_NAME"><B>DEFAULT_INTENT_SERVICE_CLASS_NAME</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#DEFAULT_ON_SERVER_LIFESPAN_MS"><B>DEFAULT_ON_SERVER_LIFESPAN_MS</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Default lifespan (7 days) of the <A HREF="./com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(Context)"><CODE>isRegisteredOnServer(Context)</CODE></A>
- flag until it is considered expired.
-</DL>
-<HR>
-<A NAME="_E_"><!-- --></A><H2>
-<B>E</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_ACCOUNT_MISSING"><B>ERROR_ACCOUNT_MISSING</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>There is no Google account on the phone.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_AUTHENTICATION_FAILED"><B>ERROR_AUTHENTICATION_FAILED</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Bad password.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_INVALID_PARAMETERS"><B>ERROR_INVALID_PARAMETERS</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>The request sent by the phone does not contain the expected parameters.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_INVALID_SENDER"><B>ERROR_INVALID_SENDER</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>The sender account is not recognized.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_PHONE_REGISTRATION_ERROR"><B>ERROR_PHONE_REGISTRATION_ERROR</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Incorrect phone registration with Google.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#ERROR_SERVICE_NOT_AVAILABLE"><B>ERROR_SERVICE_NOT_AVAILABLE</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>The device can't read the response, or there was a 500/503 from the
- server that can be retried later.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_APPLICATION_PENDING_INTENT"><B>EXTRA_APPLICATION_PENDING_INTENT</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to get the
- application info.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_ERROR"><B>EXTRA_ERROR</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- an error when the registration fails.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_FROM"><B>EXTRA_FROM</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> to indicate which
- sender (Google API project id) sent the message.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_REGISTRATION_ID"><B>EXTRA_REGISTRATION_ID</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- the registration id when the registration succeeds.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_SENDER"><B>EXTRA_SENDER</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION">"com.google.android.c2dm.intent.REGISTER"</A> to indicate which
- senders (Google API project ids) can send messages to the application.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_SPECIAL_MESSAGE"><B>EXTRA_SPECIAL_MESSAGE</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Type of message present in the <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE">"com.google.android.c2dm.intent.RECEIVE"</A> intent.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_TOTAL_DELETED"><B>EXTRA_TOTAL_DELETED</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Number of messages deleted by the server because the device was idle.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#EXTRA_UNREGISTERED"><B>EXTRA_UNREGISTERED</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Extra used on <A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK">"com.google.android.c2dm.intent.REGISTRATION"</A> to indicate
- that the application has been unregistered.
-</DL>
-<HR>
-<A NAME="_G_"><!-- --></A><H2>
-<B>G</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><B>GCMBaseIntentService</B></A> - Class in <A HREF="./com/google/android/gcm/package-summary.html">com.google.android.gcm</A><DD>Skeleton for application-specific <CODE>IntentService</CODE>s responsible for
- handling communication from Google Cloud Messaging service.<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#GCMBaseIntentService()"><B>GCMBaseIntentService()</B></A> -
-Constructor for class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Constructor that does not set a sender id, useful when the sender id
- is context-specific.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#GCMBaseIntentService(java.lang.String...)"><B>GCMBaseIntentService(String...)</B></A> -
-Constructor for class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Constructor used when the sender id(s) is fixed.
-<DT><A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>GCMBroadcastReceiver</B></A> - Class in <A HREF="./com/google/android/gcm/package-summary.html">com.google.android.gcm</A><DD><CODE>BroadcastReceiver</CODE> that receives GCM messages and delivers them to
- an application-specific <A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><CODE>GCMBaseIntentService</CODE></A> subclass.<DT><A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html#GCMBroadcastReceiver()"><B>GCMBroadcastReceiver()</B></A> -
-Constructor for class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm">GCMBroadcastReceiver</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>GCMConstants</B></A> - Class in <A HREF="./com/google/android/gcm/package-summary.html">com.google.android.gcm</A><DD>Constants used by the GCM library.<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm"><B>GCMRegistrar</B></A> - Class in <A HREF="./com/google/android/gcm/package-summary.html">com.google.android.gcm</A><DD>Utilities for device registration.<DT><A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html#getGCMIntentServiceClassName(Context)"><B>getGCMIntentServiceClassName(Context)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm">GCMBroadcastReceiver</A>
-<DD>Gets the class name of the intent service that will handle GCM messages.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#getRegisterOnServerLifespan(Context)"><B>getRegisterOnServerLifespan(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Gets how long (in milliseconds) the <A HREF="./com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- property is valid.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#getRegistrationId(Context)"><B>getRegistrationId(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Gets the current registration id for application on GCM service.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#getSenderIds(Context)"><B>getSenderIds(Context)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Gets the sender ids.
-</DL>
-<HR>
-<A NAME="_I_"><!-- --></A><H2>
-<B>I</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_LIBRARY_RETRY"><B>INTENT_FROM_GCM_LIBRARY_RETRY</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Intent used by the GCM library to indicate that the registration call
- should be retried.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_MESSAGE"><B>INTENT_FROM_GCM_MESSAGE</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Intent sent by GCM containing a message.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_FROM_GCM_REGISTRATION_CALLBACK"><B>INTENT_FROM_GCM_REGISTRATION_CALLBACK</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Intent sent by GCM indicating with the result of a registration request.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_REGISTRATION"><B>INTENT_TO_GCM_REGISTRATION</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Intent sent to GCM to register the application.
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#INTENT_TO_GCM_UNREGISTRATION"><B>INTENT_TO_GCM_UNREGISTRATION</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Intent sent to GCM to unregister the application.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><B>isRegistered(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Checks whether the application was successfully registered on GCM
- service.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#isRegisteredOnServer(Context)"><B>isRegisteredOnServer(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Checks whether the device was successfully registered in the server side,
- as set by <A HREF="./com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)"><CODE>setRegisteredOnServer(Context, boolean)</CODE></A>.
-</DL>
-<HR>
-<A NAME="_O_"><!-- --></A><H2>
-<B>O</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onDeletedMessages(Context, int)"><B>onDeletedMessages(Context, int)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called when the GCM server tells pending messages have been deleted
- because the device was idle.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#onDestroy(Context)"><B>onDestroy(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Clear internal resources.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onError(Context, java.lang.String)"><B>onError(Context, String)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called on registration or unregistration error.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onHandleIntent(Intent)"><B>onHandleIntent(Intent)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onMessage(Context, Intent)"><B>onMessage(Context, Intent)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called when a cloud message has been received.
-<DT><A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html#onReceive(Context, Intent)"><B>onReceive(Context, Intent)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm">GCMBroadcastReceiver</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onRecoverableError(Context, java.lang.String)"><B>onRecoverableError(Context, String)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called on a registration error that could be retried.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onRegistered(Context, java.lang.String)"><B>onRegistered(Context, String)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called after a device has been registered.
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#onUnregistered(Context, java.lang.String)"><B>onUnregistered(Context, String)</B></A> -
-Method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>Called after a device has been unregistered.
-</DL>
-<HR>
-<A NAME="_P_"><!-- --></A><H2>
-<B>P</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#PERMISSION_GCM_INTENTS"><B>PERMISSION_GCM_INTENTS</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Permission necessary to receive GCM intents.
-</DL>
-<HR>
-<A NAME="_R_"><!-- --></A><H2>
-<B>R</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#register(Context, java.lang.String...)"><B>register(Context, String...)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Initiate messaging registration for the current application.
-</DL>
-<HR>
-<A NAME="_S_"><!-- --></A><H2>
-<B>S</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#setRegisteredOnServer(Context, boolean)"><B>setRegisteredOnServer(Context, boolean)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Sets whether the device was successfully registered in the server side.
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#setRegisterOnServerLifespan(Context, long)"><B>setRegisterOnServerLifespan(Context, long)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Sets how long (in milliseconds) the <A HREF="./com/google/android/gcm/GCMRegistrar.html#isRegistered(Context)"><CODE>isRegistered(Context)</CODE></A>
- flag is valid.
-</DL>
-<HR>
-<A NAME="_T_"><!-- --></A><H2>
-<B>T</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMBaseIntentService.html#TAG"><B>TAG</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm">GCMBaseIntentService</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_U_"><!-- --></A><H2>
-<B>U</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMRegistrar.html#unregister(Context)"><B>unregister(Context)</B></A> -
-Static method in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm">GCMRegistrar</A>
-<DD>Unregister the application.
-</DL>
-<HR>
-<A NAME="_V_"><!-- --></A><H2>
-<B>V</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/GCMConstants.html#VALUE_DELETED_MESSAGES"><B>VALUE_DELETED_MESSAGES</B></A> -
-Static variable in class com.google.android.gcm.<A HREF="./com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm">GCMConstants</A>
-<DD>Special message indicating the server deleted the pending messages.
-</DL>
-<HR>
-<A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <A HREF="#_V_">V</A>
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/index.html b/docs/html/guide/google/gcm/client-javadoc/index.html
deleted file mode 100644
index fa7af90..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Wed Aug 22 13:22:47 PDT 2012-->
-<TITLE>
-Generated Documentation (Untitled)
-</TITLE>
-<SCRIPT type="text/javascript">
- targetPage = "" + window.location.search;
- if (targetPage != "" && targetPage != "undefined")
- targetPage = targetPage.substring(1);
- if (targetPage.indexOf(":") != -1)
- targetPage = "undefined";
- function loadFrames() {
- if (targetPage != "" && targetPage != "undefined")
- top.classFrame.location = top.targetPage;
- }
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-</HEAD>
-<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
-<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-<FRAME src="com/google/android/gcm/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<NOFRAMES>
-<H2>
-Frame Alert</H2>
-
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<BR>
-Link to<A HREF="com/google/android/gcm/package-summary.html">Non-frame version.</A>
-</NOFRAMES>
-</FRAMESET>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/overview-tree.html b/docs/html/guide/google/gcm/client-javadoc/overview-tree.html
deleted file mode 100644
index 392f3e0..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/overview-tree.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 22 13:22:47 PDT 2012 -->
-<TITLE>
-Class Hierarchy
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-22">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Class Hierarchy";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For All Packages</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="com/google/android/gcm/package-tree.html">com.google.android.gcm</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.Object<UL>
-<LI TYPE="circle">BroadcastReceiver<UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMBroadcastReceiver.html" title="class in com.google.android.gcm"><B>GCMBroadcastReceiver</B></A></UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMConstants.html" title="class in com.google.android.gcm"><B>GCMConstants</B></A><LI TYPE="circle">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMRegistrar.html" title="class in com.google.android.gcm"><B>GCMRegistrar</B></A><LI TYPE="circle">IntentService<UL>
-<LI TYPE="circle">com.google.android.gcm.<A HREF="com/google/android/gcm/GCMBaseIntentService.html" title="class in com.google.android.gcm"><B>GCMBaseIntentService</B></A></UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/client-javadoc/package-list b/docs/html/guide/google/gcm/client-javadoc/package-list
deleted file mode 100644
index 149691e..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/package-list
+++ /dev/null
@@ -1 +0,0 @@
-com.google.android.gcm
diff --git a/docs/html/guide/google/gcm/client-javadoc/resources/inherit.gif b/docs/html/guide/google/gcm/client-javadoc/resources/inherit.gif
deleted file mode 100644
index c814867..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/resources/inherit.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/google/gcm/client-javadoc/stylesheet.css b/docs/html/guide/google/gcm/client-javadoc/stylesheet.css
deleted file mode 100644
index 6ea9e51..0000000
--- a/docs/html/guide/google/gcm/client-javadoc/stylesheet.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF; color:#000000 }
-
-/* Headings */
-h1 { font-size: 145% }
-
-/* Table colors */
-.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
-.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
-.TableRowColor { background: #FFFFFF; color:#000000 } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-
-/* Navigation bar fonts and colors */
-.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
-.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
-.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
-
-.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-
diff --git a/docs/html/guide/google/gcm/demo.jd b/docs/html/guide/google/gcm/demo.jd
deleted file mode 100644
index 7e35fd6..0000000
--- a/docs/html/guide/google/gcm/demo.jd
+++ /dev/null
@@ -1,264 +0,0 @@
-page.title=GCM Demo Application
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Build and run the GCM demo app.</li>
-<li>Understand how to set up both the client and server sides of a GCM app.</li>
-<li>Become familiar with the GCM helper libraries.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol>
- <li><a href="#requirements">Requirements</a> </li>
- <li><a href="#gcm-setup">Setting Up GCM</a></li>
- <li><a href="#server-setup">Setting Up the Server</a>
- <ol>
- <li><a href="#webserver-setup">Using a standard web server</a></li>
- <li><a href="#appengine-setup">Using App Engine for Java</a></li>
- </ol>
- </li>
- <li><a href="#device-setup">Setting Up the Device</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>The Google Cloud Messaging (GCM) Demo demonstrates how to use the Google Cloud Messaging framework in your Android application. This tutorial walks you through setting up and running the demo.</p>
-
-
-<p>This demo consists of the following pieces: </p>
-<ul>
- <li>A web server containing a page where you can send messages.</li>
- <li>An Android application that receives and displays such messages.</li>
-</ul>
-<p>Here is the API reference documentation for the helper libraries on which the demo is based:</p>
-<ul>
- <li><a href="{@docRoot}guide/google/gcm/client-javadoc/index.html">Client Reference</a></li>
- <li><a href="{@docRoot}guide/google/gcm/server-javadoc/index.html">Server Reference</a></li>
-</ul>
-
-<p>The sections below describe how to download the demo code and helper libraries from the SDK Manager. The demo code and helper libraries are also available at the <a href="http://code.google.com/p/gcm">open source site</a>.
-
-<h2 id="requirements">Requirements</h2>
-<p>For the web server:</p>
-<ul>
- <li> <a href="http://ant.apache.org/">Ant 1.8</a> (it might work with earlier versions, but it's not guaranteed).</li>
- <li>One of the following:
- <ul>
- <li>A running web server compatible with Servlets API version 2.5, such as <a href="http://tomcat.apache.org/">Tomcat 6</a> or <a href="http://jetty.codehaus.org/">Jetty</a>, or</li>
- <li><a href="http://code.google.com/appengine/">Java App Engine SDK</a> version 1.6 or later.</li>
- </ul>
- </li>
- <li>A Google account registered to use GCM.</li>
- <li>The API key for that account.</li>
-</ul>
-<p>For the Android application:</p>
-<ul>
- <li>Emulator (or device) running Android 2.2 with Google APIs.</li>
- <li>The Google API project number of the account registered to use GCM.</li>
-</ul>
-<h2 id="gcm-setup">Setting Up GCM</h2>
-<p>Before proceeding with the server and client setup, it's necessary to register a Google account with the Google API Console, enable Google Cloud Messaging in GCM, and obtain an API key from the <a href="https://code.google.com/apis/console">Google API Console</a>.</p>
-<p>For instructions on how to set up GCM, see <a href="gs.html">Getting Started</a>.</p>
-
-
-<h2 id="server-setup">Setting Up the Server</h2>
-<p>This section describes the different options for setting up a server.</p>
-<h3 id="webserver-setup">Using a standard web server</h3>
-<p>To set up the server using a standard, servlet-compliant web server:</p>
-<ol>
- <li> From the SDK Manager, install <strong>Extras &gt; Google Cloud Messaging for Android Library</strong>.
-
-
- <p>This creates a <code>gcm</code> directory under <code><em>YOUR_SDK_ROOT</em>/extras/google/</code> containing these subdirectories: <code>gcm-client</code>, <code>gcm-server</code>, <code>samples/gcm-demo-client</code>, <code>samples/gcm-demo-server</code>, and <code>samples/gcm-demo-appengine</code>.</p>
-
-<p class="note"><strong>Note:</strong> If you don't see <strong>Extras &gt; Google Cloud Messaging for Android Library</strong> in the SDK Manager, make sure you are running version 20 or higher. Be sure to restart the SDK Manager after updating it.</p>
- </li>
-
- <li>In a text editor, edit the <code>samples/gcm-demo-server/WebContent/WEB-INF/classes/api.key</code> and replace the existing text with the API key obtained above.</li>
- <li>In a shell window, go to the <code>samples/gcm-demo-server</code> directory.</li>
- <li>Generate the server's WAR file by running <code>ant war</code>:</li>
-
- <pre class="prettyprint">$ ant war
-
-Buildfile:build.xml
-
-init:
- [mkdir] Created dir: build/classes
- [mkdir] Created dir: dist
-
-compile:
- [javac] Compiling 6 source files to build/classes
-
-war:
- [war] Building war: <strong>dist/gcm-demo.war</strong>
-
-BUILD SUCCESSFUL
-Total time: 0 seconds
-</pre>
-
- <li>Deploy the <code>dist/gcm-demo.war</code> to your running server. For instance, if you're using Jetty, copy <code>gcm-demo.war</code> to the <code>webapps</code> directory of the Jetty installation.</li>
- <li>Open the server's main page in a browser. The URL depends on the server you're using and your machine's IP address, but it will be something like <code>http://192.168.1.10:8080/gcm-demo/home</code>, where <code>gcm-demo</code> is the application context and <code>/home</code> is the path of the main servlet.
-
- </li>
-</ol>
-<p class="note"><strong>Note:</strong> You can get the IP by running <code>ifconfig</code> on Linux or MacOS, or <code>ipconfig</code> on Windows. </p>
-<p><img src="{@docRoot}images/gcm/gcm-demo-homepage.png" class="screenshot" /></p>
-<p> You server is now ready.</p>
-<h3 id="appengine-setup">Using App Engine for Java</h3>
-
-<p>To set up the server using a standard App Engine for Java:</p>
-<ol>
- <li> From the SDK Manager, install <strong>Extras &gt; Google Cloud Messaging for Android Library</strong>.
- <p>This creates a <code>gcm</code> directory under <code><em>YOUR_SDK_ROOT</em>/extras/google/</code> containing these subdirectories: <code>gcm-client</code>, <code>gcm-server</code>, <code>samples/gcm-demo-client</code>, <code>samples/gcm-demo-server</code>, and <code>samples/gcm-demo-appengine</code>.</p>
- </li>
- <li>In a text editor, edit <code>samples/gcm-demo-appengine/src/com/google/android/gcm/demo/server/ApiKeyInitializer.java</code> and replace the existing text with the API key obtained above.
- <p class="note"><strong>Note:</strong> The API key value set in that class will be used just once to create a persistent entity on App Engine. If you deploy the application, you can use App Engine's <code>Datastore Viewer</code> to change it later.</p>
-
- </li>
- <li>In a shell window, go to the <code>samples/gcm-demo-appengine</code> directory.</li>
- <li>Start the development App Engine server by <code>ant runserver</code>, using the <code>-Dsdk.dir</code> to indicate the location of the App Engine SDK and <code>-Dserver.host</code> to set your server's hostname or IP address:</li>
-
-<pre class="prettyprint">
-$ ant -Dsdk.dir=/opt/google/appengine-java-sdk runserver -Dserver.host=192.168.1.10
-Buildfile: gcm-demo-appengine/build.xml
-
-init:
- [mkdir] Created dir: gcm-demo-appengine/dist
-
-copyjars:
-
-compile:
-
-datanucleusenhance:
- [enhance] DataNucleus Enhancer (version 1.1.4) : Enhancement of classes
- [enhance] DataNucleus Enhancer completed with success for 0 classes. Timings : input=28 ms, enhance=0 ms, total=28 ms. Consult the log for full details
- [enhance] DataNucleus Enhancer completed and no classes were enhanced. Consult the log for full details
-
-runserver:
- [java] Jun 15, 2012 8:46:06 PM com.google.apphosting.utils.jetty.JettyLogger info
- [java] INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
- [java] Jun 15, 2012 8:46:06 PM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
- [java] INFO: Successfully processed gcm-demo-appengine/WebContent/WEB-INF/appengine-web.xml
- [java] Jun 15, 2012 8:46:06 PM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
- [java] INFO: Successfully processed gcm-demo-appengine/WebContent/WEB-INF/web.xml
- [java] Jun 15, 2012 8:46:09 PM com.google.android.gcm.demo.server.ApiKeyInitializer contextInitialized
- [java] SEVERE: Created fake key. Please go to App Engine admin console, change its value to your API Key (the entity type is 'Settings' and its field to be changed is 'ApiKey'), then restart the server!
- [java] Jun 15, 2012 8:46:09 PM com.google.appengine.tools.development.DevAppServerImpl start
- [java] INFO: The server is running at http://192.168.1.10:8080/
- [java] Jun 15, 2012 8:46:09 PM com.google.appengine.tools.development.DevAppServerImpl start
- [java] INFO: The admin console is running at http://192.168.1.10:8080/_ah/admin
-</pre>
-
- <li>Open the server's main page in a browser. The URL depends on the server you're using and your machine's IP address, but it will be something like <code>http://192.168.1.10:8080/home</code>, where <code>/home</code> is the path of the main servlet.</li>
-
- <p class="note"><strong>Note:</strong> You can get the IP by running <code>ifconfig</code> on Linux or MacOS, or <code>ipconfig</code> on Windows.</p>
-
- <p><img src="{@docRoot}images/gcm/gcm-demo-homepage-appengine.png" class="screenshot" /></p>
-</ol>
-<p> You server is now ready.</p>
-<h2 id="device-setup">Setting Up the Device</h2>
-<p>To set up the device:</p>
-<ol>
- <li> From the SDK Manager, install <strong>Extras &gt; Google Cloud Messaging for Android Library</strong>.
- <p>This creates a <code>gcm</code> directory under <code><em>YOUR_SDK_ROOT</em>/extras/google</code> containing these subdirectories: <code>gcm-client</code>, <code>gcm-server</code>, <code>samples/gcm-demo-client</code>, <code>samples/gcm-demo-server</code>, and <code>samples/gcm-demo-appengine</code>.</p>
- </li>
- <li>Using a text editor, open <code>samples/gcm-demo-client/src/com/google/android/gcm/demo/app/CommonUtilities.java</code> and set the proper values for the <code>SENDER_ID</code> and <code>SERVER_URL</code> constants. For example:</li>
-
-<pre class="prettyprint pretty-java">
-static final String SERVER_URL = &quot;http://192.168.1.10:8080/gcm-demo&quot;;
-static final String SENDER_ID = &quot;4815162342&quot;;</pre>
-<p>Note that the <code>SERVER_URL</code> is the URL for the server and the application's context (or just server, if you are using App Engine), and it does not include the forward slash (<code>/</code>). Also note that <code>SENDER_ID</code> is the Google API project number you obtained in the server setup steps above.</p>
-
- <li>In a shell window, go to the <code>gcm-demo-client</code> directory.</li>
- <li>Use the SDK's <code>android</code> tool to generate the <code>ant</code> build files:</li>
-
-<pre class="prettyprint">
-$ android update project --name GCMDemo -p . --target android-16
-Updated project.properties
-Updated local.properties
-Updated file ./build.xml
-Updated file ./proguard-project.txt
-</pre>
-<p>If this command fails becase <code>android-16</code> is not recognized, try a different target (as long as it is at least <code>android-15</code>).</p>
-
-<li>Use <code>ant</code> to build the application's APK file:</li>
-
- <pre class="prettyprint">
-$ ant clean debug
-Buildfile: build.xml
-
-...
-
-
--do-debug:
-[zipalign] Running zip align on final apk...
- [echo] Debug Package: bin/GCMDemo-debug.apk
-[propertyfile] Creating new property file: <strong>bin/build.prop</strong>
-[propertyfile] Updating property file: bin/build.prop
-[propertyfile] Updating property file: bin/build.prop
-[propertyfile] Updating property file: bin/build.prop
-
--post-build:
-
-debug:
-
-BUILD SUCCESSFUL
-Total time: 3 seconds
- </pre>
-
-<li>Start the Android emulator:</li>
-<pre class="prettyprint">$emulator -avd my_avd
-</pre>
-
-<p> This example assumes there is an AVD (Android Virtual Device) named <code>my_avd</code> previously configured with Android 2.2 and Google APIs level 8. For more information on how to run an Android emulator, see <a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a> in the Android Developers Guide.</p>
-
-<li>Make sure there is a Google account added to the emulator. It doesn't have to be any account (like the <code>senderId</code>) in particular. </li>
-
-<p> If the emulator is running Android 4.0.4 or later, this step is optional as GCM does not require an account from this version on.</p>
-
-<li>Install the application in the emulator:</li>
-
-<pre class="prettyprint">
-$ ant installd
-Buildfile: gcm-demo-client/build.xml
-
--set-mode-check:
-
--set-debug-files:
-
-install:
- [echo] Installing gcm-demo-client/bin/GCMDemo-debug.apk onto default emulator or device...
- [exec] 1719 KB/s (47158 bytes in 0.026s)
- [exec] pkg: /data/local/tmp/GCMDemo-debug.apk
- [exec] Success
-
-installd:
-
-BUILD SUCCESSFUL
-Total time: 3 seconds
-</pre>
- <li>In the emulator, launch the GCM Demo app. The initial screen should look like this:</li>
- <p><img src="{@docRoot}images/gcm/gcm-avd-home-auto-reg.png" class="screenshot" /></p>
-<p class="note"><strong>Note:</strong> What happened? When the device received a registration callback intent from GCM, it contacted the server to register itself, using the register servlet and passing the registration ID received from GCM; the server then saved the registration ID to use it to send messages to the phone.</p>
-<li> Now go back to your browser and refresh the page. It will show that there is one device registered:</li>
-
-<p><img src="{@docRoot}images/gcm/gcm-device-reg.png" class="screenshot" /></p>
-
-<li>Click on <strong>Send Message</strong>. The browser should show:</li>
-<p><img src="{@docRoot}images/gcm/gcm-sent-server.png" class="screenshot" /></p>
-
-<p>And in your emulator:</p>
-
-<p><img src="{@docRoot}images/gcm/gcm-avd-first-msg.png" class="screenshot" /></p>
-
-<p class="note"><strong>Note:</strong> What happened? When you clicked the button, the web server sent a message to GCM addressed to your device (more specifically, to the registration ID returned by GCM during the registration step). The device then received the message and displayed in the main activity; it also issued a system notification so the user would be notified even if the demo application was not running.</p>
-</ol>
-
diff --git a/docs/html/guide/google/gcm/gcm.jd b/docs/html/guide/google/gcm/gcm.jd
deleted file mode 100644
index 1762e12..0000000
--- a/docs/html/guide/google/gcm/gcm.jd
+++ /dev/null
@@ -1,1040 +0,0 @@
-page.title=GCM Architectural Overview
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Get an introduction to key GCM terms and concepts.</li>
-<li>Learn the basic features of a GCM application.</li>
-<li>Understand the role of the 3rd-party application server, and how to send messages and process results.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol class="toc">
- <li><a href="#intro">Introduction</a> </li>
- <li><a href="#arch">Architectural Overview</a>
- <ol>
- <li><a href="#lifecycle">Lifecycle Flow</a></li>
- <li><a href="#user">What Does the User See?</a></li>
- </ol>
- </li>
- <li><a href="#writing_apps">Writing Android Applications that use GCM</a>
- <ol>
- <li><a href="#manifest">Creating the Manifest</a></li>
- <li><a href="#registering">Registering for GCM</a></li>
- <li><a href="#unregistering">Unregistering from GCM</a></li>
- <li><a href="#handling_intents">Handling Intents sent by GCM</a>
- <ol>
- <li><a href="#handling_reg">Handling Registration Results</a></li>
- <li><a href="#received_data">Handling Received Data</a></li>
- </ol>
- </li>
- <li><a href="#testing">Developing and Testing Your Android Applications</a></li>
- </ol>
- </li>
- <li><a href="#server">Role of the 3rd-party Application Server</a>
- <ol class="toc">
- <li><a href="#send-msg">Sending Messages</a>
- <ol>
- <li><a href="#request">Request format</a></li>
- <li><a href="#response">Response format</a></li>
- </ol>
- </li>
- </ol>
- <li><a href="#stats">Viewing statistics</a>
- </li>
- <li><a href="#example">Examples</a></li>
-</ol>
-
-
-
-</div>
-</div>
-
-<p>Google Cloud Messaging for Android (GCM) is a free service that helps
-developers send data from servers to their Android applications on Android
-devices. This could be a lightweight message telling the Android application
-that there is new data to be fetched from the server (for instance, a movie
-uploaded by a friend), or it could be a message containing up to 4kb of payload
-data (so apps like instant messaging can consume the message directly). The GCM
-service handles all aspects of queueing of messages and delivery to the target
-Android application running on the target device.</p>
-
-
-<p class="note"> To jump right into using GCM with your Android
- applications, see the instructions in <a href="gs.html">Getting Started</a>.</p>
-
-
-
-
-<h2 id="intro">Introduction</h2>
-
-<p>Here are the primary characteristics of Google Cloud
-Messaging (GCM):</p>
-
-<ul>
- <li>It allows 3rd-party application servers to send messages to
-their Android applications.</li>
- <li>An Android application on an Android device doesn't need to be running to receive
-messages. The system will wake up the Android application via Intent broadcast when the message arrives, as long as the application is set up with the proper
-broadcast receiver and permissions.</li>
- <li>It does not provide any built-in user interface or other handling for
-message data. GCM simply passes raw message data received straight to the
-Android application, which has full control of how to handle it. For example, the
-application might post a notification, display a custom user interface, or
-silently sync data.</li>
- <li>It requires devices running Android 2.2 or higher that also have the
-Google Play Store application installed, or or an emulator running Android 2.2 with Google APIs. However, you are not limited to deploying your
-Android applications through Google Play Store.</li>
- <li>It uses an existing connection for Google services. For pre-3.0 devices, this requires users to
-set up their Google account on their mobile devices. A Google account is not a requirement on devices running Android 4.0.4 or higher.</li>
-</ul>
-<h2 id="arch">Architectural Overview</h2>
-<p>This section gives an overview of how GCM works. </p>
-<p>This table summarizes the key terms and concepts involved in GCM. It is
-divided into these categories:</p>
-<ul>
- <li><strong>Components</strong> &mdash; The physical entities that play a role in
-GCM.</li>
- <li><strong>Credentials</strong> &mdash; The IDs and tokens that are used in
-different stages of GCM to ensure that all parties have been authenticated, and
-that the message is going to the correct place.</li>
-</ul>
-
-<table>
- <tr>
- <th colspan="2">Components</th>
- </tr>
- <tr>
- <td width="165"><strong>Mobile Device</strong></td>
- <td width="1176">The device that is running an Android application that uses
-GCM. This must be a 2.2 Android device that has Google Play Store installed, and it must
-have at least one logged in Google account if the device is running a version lower than Android 4.0.4. Alternatively, for testing you can use an emulator running Android 2.2 with Google APIs.</td>
- </tr>
- <tr>
- <td><strong>3rd-party Application Server</strong></td>
- <td>An application server that developers set up as part of implementing
-GCM in their applications. The 3rd-party application server sends data to an
-Android application on the device via the GCM server.</td>
- </tr>
- <tr>
- <td><strong>GCM Servers</strong></td>
- <td>The Google servers involved in taking messages from the 3rd-party
-application server and sending them to the device. </td>
- </tr>
- <tr>
- <th colspan="2"><strong>Credentials</strong></th>
- </tr>
- <tr>
- <td><strong>Sender ID</strong></td>
- <td>A project number you acquire from the API console, as described in <a href="gs.html#create-proj">Getting Started</a>. The sender
-ID is used in the <a href="#registering">registration process</a> to identify an
-Android application that is permitted to send messages to the device.</td>
- </tr>
- <tr>
- <td><strong>Application ID</strong></td>
- <td>The Android application that is registering to receive messages. The Android application
-is identified by the package name from the <a href="#manifest">manifest</a>.
-This ensures that the messages are targeted to the correct Android application.</td>
- </tr>
- <tr>
- <td><strong>Registration ID</strong></td>
- <td>An ID issued by the GCM servers to the Android application that allows
-it to receive messages. Once the Android application has the registration ID, it sends
-it to the 3rd-party application server, which uses it to identify each device
-that has registered to receive messages for a given Android application. In other words,
-a registration ID is tied to a particular Android application running on a particular
-device.</td>
- </tr>
- <tr>
- <td><strong>Google User Account</strong></td>
- <td>For GCM to work, the mobile device must include at least one Google account if the device is running a version lower than Android 4.0.4.</td>
- </tr>
- <tr>
- <td><strong>Sender Auth Token</strong></td>
- <td>An API key that is saved on the 3rd-party application
-server that gives the application server authorized access to Google services.
-The API key is included in the header of POST requests that send messages.</td>
- </tr>
-</table>
-
-<h3 id="lifecycle">Lifecycle Flow</h3>
-
-<p>Here are the primary processes involved in cloud-to-device messaging:</p>
-
-<ul>
- <li><a href="#register">Enabling GCM</a>. An Android application running on a
-mobile device registers to receive messages.</li>
- <li><a href="#push-process">Sending a message</a>. A 3rd-party application
-server sends messages to the device.</li>
- <li><a href="#receiving">Receiving a message</a>. An Android application
-receives a message from a GCM server.</li>
-</ul>
-
-<p>These processes are described in more detail below.</p>
-
-<h4 id="register">Enabling GCM</h4>
-
-<p>This is the sequence of events that occurs when an Android application
-running on a mobile device registers to receive messages:<span
-class="red-text"></span></p>
-
-<ol>
- <li>The first time the Android application needs to use the messaging service, it
-fires off a registration Intent to a GCM server.
- <p>This registration Intent
-(<code>com.google.android.c2dm.intent.REGISTER</code>) includes the sender ID, and the Android application ID.</p>
-<p class="note"><strong>Note:</strong> Because there is no lifecycle method that is called when the application is run for
-the first time, the registration intent should be sent on <code>onCreate()</code>, but only if the application is not registered yet.
-</p>
- </li>
- <li>If the registration is successful, the GCM server broadcasts a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent which gives the Android application a registration
-ID.
- <p>The Android application should store this ID for later use (for instance, to check on <code>onCreate()</code> if it is already registered).
-Note that Google may periodically refresh the registration ID, so you should design your Android application
-with the understanding that the <code>com.google.android.c2dm.intent.REGISTRATION</code> intent may be called
-multiple times. Your Android application needs to be able to respond
-accordingly.</p></li>
- <li>To complete the registration, the Android application sends the registration ID to
-the application server. The application server typically stores the registration
-ID in a database. </li>
-</ol>
-
-<p>The registration ID lasts until the Android application explicitly unregisters
-itself, or until Google refreshes the registration ID for your Android application.</p>
-
-<p class="note"><strong>Note:</strong> When users uninstall an application, it is not automatically unregistered on GCM. It is only unregistered when the GCM server tries to send a message to the device and the device answers that the application is uninstalled or it does not have a broadcast receiver configured to receive <code>com.google.android.c2dm.intent.RECEIVE</code> intents. At that point, you server should mark the device as unregistered (the server will receive a <code><a href="#unreg_device">NotRegistered</a></code> error).
- <p>
-Note that it might take a few minutes for the registration ID to be completed removed from the GCM server. So if the 3rd party server sends a message during this time, it will get a valid message ID, even though the message will not be delivered to the device.</p>
-</p>
-
-<h4 id="push-process">Sending a Message</h4>
-
-<p>For an application server to send a message to an Android application, the following things must be in
-place:</p>
-
-<ul>
- <li>The Android application has a registration ID that allows it to receive messages
-for a particular device.</li>
- <li>The 3rd-party application server has stored the registration ID.</li>
-
-
-
-<li>An API key. This is something that the developer must have already
-set up on the application server for the Android application (for more discussion, see
-<a href="#server">Role of the 3rd-party Application Server</a>). Now it will
-get used to send messages to the device. </li>
-</ul>
-
-<p>Here is the sequence of events that occurs when the application server sends a
-message:</p>
-
-<ol>
- <li>The application server sends a message to GCM servers.</li>
- <li>Google enqueues and stores the message in case the device is
-offline.</li>
- <li>When the device is online, Google sends the message to the device. </li>
- <li>On the device, the system broadcasts the message to the specified
-Android application via Intent broadcast with proper permissions, so that only the
-targeted Android application gets the message. This wakes the Android application up. The
-Android application does not need to be running beforehand to receive the message.</li>
- <li>The Android application processes the message. If the Android application is doing
-non-trivial processing, you may want to grab a {@link android.os.PowerManager.WakeLock} and do any processing in a Service.</li>
-</ol>
-
-<p> An Android application can unregister GCM if it no longer wants to receive
-messages.</p>
-
-<h4 id="receiving">Receiving a Message</h4>
-
-<p>This is the sequence of events that occurs when an Android application
-installed on a mobile device receives a message:</p>
-
-<ol>
- <li>The system receives the incoming message and extracts the raw key/value
-pairs from the message payload, if any.</li>
- <li>The system passes the key/value pairs to the targeted Android application
-in a <code>com.google.android.c2dm.intent.RECEIVE</code> Intent as a set of
-extras.</li>
- <li>The Android application extracts the raw data
-from the <code>com.google.android.c2dm.intent.RECEIVE</code><code> </code>Intent by key and processes the data.</li>
-</ol>
-
-<h3 id="user">What Does the User See?</h3>
-
-<p>When mobile device users install Android applications that include GCM, the Google Play Store will inform them that the Android application
-includes GCM. They must approve the use of this feature to install the
-Android application. </p>
-
-<h2 id="writing_apps">Writing Android Applications that Use GCM</h2>
-
-<p>To write Android applications that use GCM, you must have an application
-server that can perform the tasks described in <a href="#server">Role of the
-3rd-party Application Server</a>. This section describes the steps you take to
-create a client application that uses GCM.</p>
-
-<p>Remember that there is no user interface associated with GCM.
-However you choose to process messages in your Android application is up to you.</p>
-
-<p>There are two primary steps involved in writing a client Android application:</p>
-
-<ul>
- <li>Creating a manifest that contains the permissions the Android application needs to
-use GCM.</li>
- <li>Implementing your code. To use GCM, this implementation must
-include:
- <ul>
- <li>Code to start and stop the registration service.</li>
- <li>Receivers for the <code>com.google.android.c2dm.intent.RECEIVE</code> and <code>com.google.android.c2dm.intent.REGISTRATION</code> intents.</li>
- </ul>
- </li>
-</ul>
-
-<h3 id="manifest">Creating the Manifest</h3>
-
-<p>Every Android application must have an <code>AndroidManifest.xml</code> file (with
-precisely that name) in its root directory. The manifest presents essential
-information about the Android application to the Android system, information the
-system must have before it can run any of the Android application's code (for more
-discussion of the manifest file, see the <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">Android Developers Guide</a>. To use the GCM feature, the
-manifest must include the following:</p>
-
-<ul>
- <li>The <code>com.google.android.c2dm.permission.RECEIVE</code> permission so the Android application can register and receive messages.</li>
- <li>The <code>android.permission.INTERNET</code> permission so the Android application can send the registration ID to the 3rd party server.</li>
- <li>The <code>android.permission.GET_ACCOUNTS</code> permission as GCM requires a Google account (necessary only if if the device is running a version lower than Android 4.0.4)</li>
- <li>The <code>android.permission.WAKE_LOCK</code> permission so the application can keep the processor from sleeping when a message is received.</li>
- <li>An <code>applicationPackage + &quot;.permission.C2D_MESSAGE</code> permission to prevent other Android applications from registering and receiving the Android application's
-messages. The permission name must exactly match this pattern&mdash;otherwise the Android application will not receive the messages.</li>
- <li>A receiver for <code>com.google.android.c2dm.intent.RECEIVE</code> and <code>com.google.android.c2dm.intent.REGISTRATION</code>, with the category set
-as <code>applicationPackage</code>. The receiver should require the <code>com.google.android.c2dm.SEND</code> permission, so that only the GCM
-Framework can send a message to it. Note that both registration and the receiving
-of messages are implemented as <a href="{@docRoot}guide/components/intents-filters.html">Intents</a>.</li>
- <li>An intent service to handle the intents received by the broadcast receiver.</li>
- <li>If the GCM feature is critical to the Android application's function, be sure to
-set <code>android:minSdkVersion=&quot;8&quot;</code> in the manifest. This
-ensures that the Android application cannot be installed in an environment in which it
-could not run properly. </li>
-</ul>
-
-<p>Here are excerpts from a manifest that supports GCM:</p>
-
-<pre class="prettyprint pretty-xml">
-&lt;manifest package="com.example.gcm" ...&gt;
-
- &lt;uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16"/&gt;
- &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
- &lt;uses-permission android:name="android.permission.GET_ACCOUNTS" /&gt;
- &lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt;
- &lt;uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /&gt;
-
- &lt;permission android:name="com.example.gcm.permission.C2D_MESSAGE"
- android:protectionLevel="signature" /&gt;
- &lt;uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" /&gt;
-
- &lt;application ...&gt;
- &lt;receiver
- android:name=".MyBroadcastReceiver"
- android:permission="com.google.android.c2dm.permission.SEND" &gt;
- &lt;intent-filter&gt;
- &lt;action android:name="com.google.android.c2dm.intent.RECEIVE" /&gt;
- &lt;action android:name="com.google.android.c2dm.intent.REGISTRATION" /&gt;
- &lt;category android:name="com.example.gcm" /&gt;
- &lt;/intent-filter&gt;
- &lt;/receiver&gt;
- &lt;service android:name=".MyIntentService" /&gt;
- &lt;/application&gt;
-
-&lt;/manifest&gt;
-</pre>
-<h3 id="registering">Registering for GCM</h3>
-
-<p>An Android application needs to register with GCM servers before it can receive messages. To register, the application sends an Intent
-(<code>com.google.android.c2dm.intent.REGISTER</code>), with 2 extra parameters:
-</p>
-
-<ul>
- <li><code>sender</code> is the project number of the account authorized to send messages
-to the Android application. </li>
- <li><code>app</code> is the Android application's ID, set with a <code>PendingIntent</code> to
-allow the registration service to extract Android application information. </li>
-</ul>
-
-<p>For example:</p>
-
-<pre class="prettyprint pretty-java">Intent registrationIntent = new Intent(&quot;com.google.android.c2dm.intent.REGISTER&quot;);
-// sets the app name in the intent
-registrationIntent.putExtra(&quot;app&quot;, PendingIntent.getBroadcast(this, 0, new Intent(), 0));
-registrationIntent.putExtra(&quot;sender&quot;, senderID);
-startService(registrationIntent);</pre>
-
-<p>This intent will be asynchronously sent to the GCM server, and the response will be delivered to
-the application as a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent containing
-the registration ID assigned to the Android application running on that particular device.</p>
-
-<p>Registration is not complete until the Android application sends the registration ID
-to the 3rd-party application server, which in turn will use the registration ID to send
-messages to the application.</p>
-
-<h3 id="unregistering">Unregistering from GCM</h3>
-
-<p>To unregister from GCM, do the following:</p>
-
-<pre class="prettyprint pretty-java">Intent unregIntent = new Intent(&quot;com.google.android.c2dm.intent.UNREGISTER&quot;);
-unregIntent.putExtra(&quot;app&quot;, PendingIntent.getBroadcast(this, 0, new Intent(), 0));
-startService(unregIntent);
-</pre>
-
-<p>Similar to the registration request, this intent is sent asynchronously, and the response comes as a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent.
-
-
-<h3 id="handling_intents">Handling Intents sent by GCM</h3>
-
-<p>As discussed in <a href="#manifest">Creating the Manifest</a>, the manifest
-defines a broadcast receiver for the <code>com.google.android.c2dm.intent.REGISTRATION</code> and <code>com.google.android.c2dm.intent.RECEIVE</code> intents.
-These <a href="{@docRoot}guide/components/intents-filters.html">intents</a> are sent by GCM to indicate that a device was registered (or unregistered), or to deliver messages, respectively.</p>
-
-<p>Handling these intents might require I/O operations (such as network calls to the 3rd party server), and
-such operations should not be done in the receiver's <code>onReceive()</code> method.
-You may be tempted to spawn a new thread directly, but there are no guarantees that the process will run long enough for the thread to finish the work.
-Thus the recommended way to handle the intents is to delegate them to a service, such as an {@link android.app.IntentService}.
-For example:</p>
-
-
-<pre class="prettyprint pretty-java">
-public class MyBroadcastReceiver extends BroadcastReceiver {
-
- &#64;Override
- public final void onReceive(Context context, Intent intent) {
- MyIntentService.runIntentInService(context, intent);
- setResult(Activity.RESULT_OK, null, null);
- }
-}
-</pre>
-
-<p>Then in <code>MyIntentService</code>:</p>
-<pre class="prettyprint pretty-java">
-public class MyIntentService extends IntentService {
-
- private static PowerManager.WakeLock sWakeLock;
- private static final Object LOCK = MyIntentService.class;
-
- static void runIntentInService(Context context, Intent intent) {
- synchronized(LOCK) {
- if (sWakeLock == null) {
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_wakelock");
- }
- }
- sWakeLock.acquire();
- intent.setClassName(context, MyIntentService.class.getName());
- context.startService(intent);
- }
-
- &#64;Override
- public final void onHandleIntent(Intent intent) {
- try {
- String action = intent.getAction();
- if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) {
- handleRegistration(intent);
- } else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) {
- handleMessage(intent);
- }
- } finally {
- synchronized(LOCK) {
- sWakeLock.release();
- }
- }
- }
-}
-</pre>
-
-<p class="note"><strong>Note:</strong> your application must acquire a wake lock before starting the service&mdash;otherwise the device could be put to sleep before the service is started.</p>
-
-<h4 id="handling_reg">Handling Registration Results</h4>
-
-<p>When a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent is received, it could potentially contain 3 extras: <code>registration_id</code>, <code>error</code>, and <code>unregistered</code>.
-
-<p>When a registration succeeds, <code>registration_id</code> contains the registration ID and the other extras are not set.
-The application must ensure that the 3rd-party server receives the registration ID. It may do so by saving the registration ID and sending it to the server.
-If the network is down or there are errors, the application should retry sending the registration ID when the network is up again or the next time it starts.</p>
-
-<p class="note"><strong>Note:</strong> Although the <code>com.google.android.c2dm.intent.REGISTRATION</code> intent is typically received after a request was made by the application,
-Google may periodically refresh the registration ID. So the application must be prepared to handle it at any time.</p>
-
-<p>When an unregistration succeeds, only the <code>unregistered</code> extra is set, and similar to the registration workflow,
-the application must contact the 3rd-party server to remove the registration ID (note that the registration ID is not available in the intent,
-but the application should have saved the registration ID when it got it).<p>
-
-<p>If the application request (be it register or unregister) fails, the <code>error</code> will be set with an error code, and the other extras will not be set.
-
-Here are the possible error codes:</p>
-
-<table>
- <tr>
- <th>Error Code</th>
- <th>Description</th>
- </tr>
- <tr>
- <td><code>SERVICE_NOT_AVAILABLE</code></td>
- <td>The device can't read the response, or there was a 500/503 from the
-server that can be retried later. The Android application should use exponential back-off and retry. See <a href="adv.html#retry">Advanced Topics</a> for more information. </td>
- </tr>
- <tr>
- <td><code>ACCOUNT_MISSING</code></td>
- <td>There is no Google account on the phone. The Android application should ask the
-user to open the account manager and add a Google account. Fix on the device
-side.</td>
- </tr>
- <tr>
- <td><code>AUTHENTICATION_FAILED</code></td>
- <td>Bad Google Account password. The Android application should ask the user to enter his/her Google Account
-password, and let the user retry manually later. Fix on the device side.</td>
- </tr>
- <tr>
- <td><code>INVALID_SENDER</code></td>
- <td>The sender account is not recognized. This must be fixed on the Android application side. The developer must fix the application to provide the right <code>sender</code> extra in the <code>com.google.android.c2dm.intent.REGISTER</code> intent.</td>
- </tr>
- <tr>
- <td><code>PHONE_REGISTRATION_ERROR</code></td>
- <td> Incorrect phone registration with Google. This
-phone doesn't currently support GCM.</td>
- </tr>
- <tr>
- <td><code>INVALID_PARAMETERS</code></td>
- <td>The request sent by the phone does not contain the expected parameters. This phone doesn't currently support GCM.</td>
- </tr>
-</table>
-
-
-
-
-<p>Here's an example on how to handle the registration in the <code>MyIntentService</code> example:</p>
-
-<pre class="prettyprint pretty-java">
-private void handleRegistration(Intent intent) {
- String registrationId = intent.getStringExtra("registration_id");
- String error = intent.getStringExtra("error");
- String unregistered = intent.getStringExtra("unregistered");
- // registration succeeded
- if (registrationId != null) {
- // store registration ID on shared preferences
- // notify 3rd-party server about the registered ID
- }
-
- // unregistration succeeded
- if (unregistered != null) {
- // get old registration ID from shared preferences
- // notify 3rd-party server about the unregistered ID
- }
-
- // last operation (registration or unregistration) returned an error;
- if (error != null) {
- if ("SERVICE_NOT_AVAILABLE".equals(error)) {
- // optionally retry using exponential back-off
- // (see <a href="adv.html#retry">Advanced Topics</a>)
- } else {
- // Unrecoverable error, log it
- Log.i(TAG, "Received error: " + error);
- }
- }
-}</pre>
-
-<h4 id="received_data">Handling Received Data</h4>
-
-<p>The <code>com.google.android.c2dm.intent.RECEIVE</code> intent is used by GCM to
-deliver the messages sent by the 3rd-party server to the application running in the device.
-If the server included key-pair values in the <code>data</code> parameter, they are available as
-extras in this intent, with the keys being the extra names. GCM also includes an extra called
-<code>from</code> which contains the sender ID as an string, and another called <code>collapse_key</code> containing the collapse key (when in use).
-
-<p>Here is an example, again using the <code>MyIntentReceiver</code> class:</p>
-
-<pre class="prettyprint pretty-java">
-private void handleMessage(Intent intent) {
- // server sent 2 key-value pairs, score and time
- String score = intent.getExtra("score");
- String time = intent.getExtra("time");
- // generates a system notification to display the score and time
-}</pre>
-
-<h3 id="testing">Developing and Testing Your Android Applications</h3>
-
-<p>Here are some guidelines for developing and testing an Android application
-that uses the GCM feature:</p>
-
-<ul>
- <li>To develop and test your Android applications, you need to run and debug the
-applications on an Android 2.2 system image that includes the necessary
-underlying Google services. </li>
- <li>To develop and debug on an actual device, you need a device running an
-Android 2.2 system image that includes the Google Play Store application. </li>
- <li>To develop and test on the Android Emulator, you need to download the
-Android 2.2 version of the Google APIs Add-On into your SDK using the <em>Android
-SDK and AVD Manager</em>. Specifically, you need to download the component named
-&quot;Google APIs by Google Inc, Android API 8&quot;. Then, you need to set up
-an AVD that uses that system image. </li>
- <li>If the GCM feature is critical to the Android application's function, be sure to
-set <code>android:minSdkVersion=&quot;8&quot;</code> in the manifest. This
-ensures that the Android application cannot be installed in an environment in which it
-could not run properly. </li>
-</ul>
-
-<h2 id="server">Role of the 3rd-party Application Server</h2>
-
-<p>Before you can write client Android applications that use the GCM feature, you must
-have an application server that meets the following criteria:</p>
-
-<ul>
- <li>Able to communicate with your client.</li>
- <li>Able to fire off HTTPS requests to the GCM server.</li>
- <li>Able to handle requests and resend then as needed, using <a href="http://en.wikipedia.org/wiki/Exponential_backoff">exponential back-off.</a></li>
- <li>Able to store the API key and client registration IDs. The
-API key is included in the header of POST requests that send
-messages.</li>
-</ul>
-
-<h3 id="send-msg">Sending Messages</h3>
-<p>This section describes how the 3rd-party application server sends messages to one or more mobile devices. Note the following:</p>
-<ul>
- <li>A 3rd-party application server can either send messages to a single device or to multiple devices. A message sent to multiple devices simultaneously is called a <em>multicast message</em>.</li>
-
- <li>You have 2 choices in how you construct requests and responses: plain text or JSON.</li>
- <li>However, to send multicast messages, you must use JSON. Plain text will not work.</li>
-</ul>
-<p>Before the 3rd-party application server can send a message to an
- Android application, it must have received a registration ID from it.</p>
-<h4 id="request">Request format</h4>
-<p>To send a message, the application server issues a POST request to <code>https://android.googleapis.com/gcm/send</code>.</p>
-<p>A message request is made of 2 parts: HTTP header and HTTP body.</p>
-
-<p>The HTTP header must contain the following headers:</p>
-<ul>
- <li><code>Authorization</code>: key=YOUR_API_KEY</li>
- <li><code>Content-Type</code>: <code>application/json</code> for JSON; <code>application/x-www-form-urlencoded;charset=UTF-8</code> for plain text.
- </li>
-</ul>
-
-<p>For example:
-</p>
-<pre>Content-Type:application/json
-Authorization:key=AIzaSyB-1uEai2WiUapxCs2Q0GZYzPu7Udno5aA
-
-{
- "registration_ids" : ["APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx..."],
- "data" : {
- ...
- },
-}</pre>
-<p class="note">
- <p><strong>Note:</strong> If <code>Content-Type</code> is omitted, the format is assumed to be plain text.</p>
-</p>
-
-<p>The HTTP body content depends on whether you're using JSON or plain text. For JSON, it must contain a string representing a JSON object with the following fields:</p>
-<table>
- <tr>
- <th>Field</th>
- <th>Description</th>
- </tr>
- <tr>
- <td><code>registration_ids</code></td>
- <td>A string array with the list of devices (registration IDs) receiving the message. It must contain at least 1 and at most 1000 registration IDs. To send a multicast message, you must use JSON. For sending a single message to a single device, you could use a JSON object with just 1 registration id, or plain text (see below). Required.</td>
- </tr>
- <tr>
- <td><code>collapse_key</code></td>
- <td>An arbitrary string (such as &quot;Updates Available&quot;) that is used to collapse a group of like messages
-when the device is offline, so that only the last message gets sent to the
-client. This is intended to avoid sending too many messages to the phone when it
-comes back online. Note that since there is no guarantee of the order in which
-messages get sent, the &quot;last&quot; message may not actually be the last
-message sent by the application server. See <a href="adv.html#collapsible">Advanced Topics</a> for more discussion of this topic. Optional.</td>
- </tr>
- <tr>
- <td><code>data</code></td>
- <td>A JSON object whose fields represents the key-value pairs of the message's payload data. If present, the payload data it will be
-included in the Intent as application data, with the key being the extra's name. For instance, <code>"data":{"score":"3x1"}</code> would result in an intent extra named <code>score</code> whose value is the string <code>3x1</code>.
-
-There is no limit on the number of key/value pairs, though there is a limit on the total size of the message (4kb). The values could be any JSON object, but we recommend using strings, since the values will be converted to strings in the GCM server anyway. If you want to include objects or other non-string data types (such as integers or booleans), you have to do the conversion to string yourself. Also note that the key cannot be a reserved word (<code>from</code> or any word starting with <code>google.</code>). To complicate things slightly, there are some reserved words (such as <code>collapse_key</code>) that are technically allowed in payload data. However, if the request also contains the word, the value in the request will overwrite the value in the payload data. Hence using words that are defined as field names in this table is not recommended, even in cases where they are technically allowed. Optional.</td>
-
-
- </tr>
- <tr>
- <td><code>delay_while_idle</code></td>
- <td>If included, indicates that the message should not be sent immediately
-if the device is idle. The server will wait for the device to become active, and
-then only the last message for each <code>collapse_key</code> value will be
-sent. Optional. The default value is <code>false</code>, and must be a JSON boolean.</td>
- </tr>
- <tr>
- <td><code>time_to_live</code></td>
- <td>How long (in seconds) the message should be kept on GCM storage if the device is offline. Optional (default time-to-live is 4 weeks, and must be set as a JSON number).</td>
- </tr>
-<tr>
- <td><code>restricted_package_name</code></td>
- <td>A string containing the package name of your application. When set, messages will only be sent to registration IDs that match the package name. Optional.
- </td>
-</tr>
-<tr>
- <td><code>dry_run</code></td>
- <td>If included, allows developers to test their request without actually sending a message. Optional. The default value is <code>false</code>, and must be a JSON boolean.
- </td>
-</tr>
-</table>
-
-<p>If you are using plain text instead of JSON, the message fields must be set as HTTP parameters sent in the body, and their syntax is slightly different, as described below:
-<table>
- <tr>
- <th>Field</th>
- <th>Description</th>
- </tr>
- <tr>
- <td><code>registration_id</code></td>
- <td>Must contain the registration ID of the single device receiving the message. Required.</td>
- </tr>
- <tr>
- <td><code>collapse_key</code></td>
- <td>Same as JSON (see previous table). Optional.</td>
- </tr>
- <tr>
- <td><code>data.&lt;key&gt;</code></td>
-
- <td>Payload data, expressed as parameters prefixed with <code>data.</code> and suffixed as the key. For instance, a parameter of <code>data.score=3x1</code> would result in an intent extra named <code>score</code> whose value is the string <code>3x1</code>. There is no limit on the number of key/value parameters, though there is a limit on the total size of the message. Also note that the key cannot be a reserved word (<code>from</code> or any word starting with
-<code>google.</code>). To complicate things slightly, there are some reserved words (such as <code>collapse_key</code>) that are technically allowed in payload data. However, if the request also contains the word, the value in the request will overwrite the value in the payload data. Hence using words that are defined as field names in this table is not recommended, even in cases where they are technically allowed. Optional.</td>
-
- </tr>
- <tr>
- <td><code>delay_while_idle</code></td>
- <td>Should be represented as <code>1</code> or <code>true</code> for <code>true</code>, anything else for <code>false</code>. Optional. The default value is <code>false</code>.</td>
- </tr>
- <tr>
- <td><code>time_to_live</code></td>
- <td>Same as JSON (see previous table). Optional.</td>
- </tr>
-<tr>
- <td><code>restricted_package_name</code></td>
- <td>Same as JSON (see previous table). Optional.
- </td>
-</tr>
-<tr>
- <td><code>dry_run</code></td>
- <td>Same as JSON (see previous table). Optional.
- </td>
-</tr>
-</table>
-
-<p>If you want to test your request (either JSON or plain text) without delivering the message to the devices, you can set an optional HTTP or JSON parameter called <code>dry_run</code> with the value <code>true</code>. The result will be almost identical to running the request without this parameter, except that the message will not be delivered to the devices. Consequently, the response will contain fake IDs for the message and multicast fields (see <a href="#response">Response format</a>).</p>
-
- <h4 id="example-requests">Example requests</h4>
- <p>Here is the smallest possible request (a message without any parameters and just one recipient) using JSON:</p>
- <pre class="prettyprint pretty-json">{ &quot;registration_ids&quot;: [ &quot;42&quot; ] }</pre>
-
- <p>And here the same example using plain text:</p>
- <pre class="prettyprint">registration_id=42</pre>
-
- <p> Here is a message with a payload and 6 recipients:</p>
- <pre class="prettyprint pretty-HTML">{ "data": {
- "score": "5x1",
- "time": "15:10"
- },
- "registration_ids": ["4", "8", "15", "16", "23", "42"]
-}</pre>
- <p>Here is a message with all optional fields set and 6 recipients:</p>
- <pre class="prettyprint pretty-json">{ "collapse_key": "score_update",
- "time_to_live": 108,
- "delay_while_idle": true,
- "data": {
- "score": "4x8",
- "time": "15:16.2342"
- },
- "registration_ids":["4", "8", "15", "16", "23", "42"]
-}</pre>
- <p>And here is the same message using plain-text format (but just 1 recipient): </p>
-
- <pre class="prettyprint">collapse_key=score_update&amp;time_to_live=108&amp;delay_while_idle=1&amp;data.score=4x8&amp;data.time=15:16.2342&amp;registration_id=42
- </pre>
-
- <p class="note"><strong>Note:</strong> If your organization has a firewall that restricts the traffic to or from the Internet, you'll need to configure it to allow connectivity with GCM. The ports to open are: 5228, 5229, and 5230. GCM typically only uses 5228, but it sometimes uses 5229 and 5230.
-GCM doesn't provide specific IPs. It changes IPs frequently. We recommend against using ACLs but if you must use them, take a broad approach such as the method suggested in <a href="http://support.google.com/code/bin/answer.py?hl=en&answer=62464">this support link</a>.
-</p>
-
-<h4 id="response">Response format</h4>
-
-<p>There are two possible outcomes when trying to send a message:</p>
-<ul>
- <li>The message is processed successfully.</li>
- <li>The GCM server rejects the request.</li>
-</ul>
-
-<p>When the messge is processed successfully, the HTTP response has a 200 status and the body contains more information about the status of the message (including possible errors). When the request is rejected,
-the HTTP response contains a non-200 status code (such as 400, 401, or 503).</p>
-
-<p>The following table summarizes the statuses that the HTTP response header might contain. Click the troubleshoot link for advice on how to deal with each type of error.</p>
-<table border=1>
- <tr>
- <th>Response</th>
- <th>Description</th>
- </tr>
- <tr>
- <td>200</td>
- <td>Message was processed successfully. The response body will contain more details about the message status, but its format will depend whether the request was JSON or plain text. See <a href="#success">Interpreting a success response</a> for more details.</td>
- </tr>
- <tr>
- <td>400</td>
- <td><span id="internal-source-marker_0.2">Only applies for JSON requests. Indicates that the request could not be parsed as JSON, or it contained invalid fields (for instance, passing a string where a number was expected). The exact failure reason is described in the response and the problem should be addressed before the request can be retried.</td>
- </tr>
- <tr>
- <td>401</td>
- <td>There was an error authenticating the sender account. <a href="#auth_error">Troubleshoot</a></td>
- </tr>
- <tr>
- <td>5xx</td>
- <td>Errors in the 500-599 range (such as 500 or 503) indicate that there was an internal error in the GCM server while trying to process the request, or that the server is temporarily unavailable (for example, because of timeouts). Sender must retry later, honoring any <code>Retry-After</code> header included in the response. Application servers must implement exponential back-off. <a href="#internal_error">Troubleshoot</a></td>
- </tr>
-</table>
-
-<h4 id="success">Interpreting a success response</h4>
-<p>When a JSON request is successful (HTTP status code 200), the response body contains a JSON object with the following fields:</p>
-<table>
- <tr>
- <th>Field</th>
- <th>Description</th>
- </tr>
- <tr>
- <td><code>multicast_id</code></td>
- <td>Unique ID (number) identifying the multicast message.</td>
- </tr>
- <tr>
- <td><code>success</code></td>
- <td>Number of messages that were processed without an error.</td>
- </tr>
- <tr>
- <td><code>failure</code></td>
- <td>Number of messages that could not be processed.</td>
- </tr>
- <tr>
- <td><code>canonical_ids</code></td>
- <td>Number of results that contain a canonical registration ID. See <a href="adv.html#canonical">Advanced Topics</a> for more discussion of this topic.</td>
- </tr>
- <tr>
- <td><code>results</code></td>
- <td>Array of objects representing the status of the messages processed. The objects are listed in the same order as the request (i.e., for each registration ID in the request, its result is listed in the same index in the response) and they can have these fields:<br>
- <ul>
- <li><code>message_id</code>: String representing the message when it was successfully processed.</li>
- <li><code>registration_id</code>: If set, means that GCM processed the message but it has another canonical registration ID for that device, so sender should replace the IDs on future requests (otherwise they might be rejected). This field is never set if there is an error in the request.<br />
- </li>
- <li><code>error</code>: String describing an error that occurred while processing the message for that recipient. The possible values are the same as documented in the above table, plus &quot;Unavailable&quot; (meaning GCM servers were busy and could not process the message for that particular recipient, so it could be retried).</li>
- </ul></td>
- </tr>
-</table>
-<p>If the value of <code>failure</code> and <code>canonical_ids</code> is 0, it's not necessary to parse the remainder of the response. Otherwise, we recommend that you iterate through the results field and do the following for each object in that list:</p>
-<ul>
- <li>If <code>message_id</code> is set, check for <code>registration_id</code>:
- <ul>
- <li>If <code>registration_id</code> is set, replace the original ID with the new value (canonical ID) in your server database. Note that the original ID is not part of the result, so you need to obtain it from the list of <code>registration_ids</code> passed in the request (using the same index).</li>
- </ul>
- </li>
- <li>Otherwise, get the value of <code>error</code>:
- <ul>
- <li>If it is <code>Unavailable</code>, you could retry to send it in another request.</li>
- <li>If it is <code>NotRegistered</code>, you should remove the registration ID from your server database because the application was uninstalled from the device or it does not have a broadcast receiver configured to receive <code>com.google.android.c2dm.intent.RECEIVE</code> intents.</li>
- <li>Otherwise, there is something wrong in the registration ID passed in the request; it is probably a non-recoverable error that will also require removing the registration from the server database. See <a href="#error_codes">Interpreting an error response</a> for all possible error values.</li>
- </ul>
- </li>
-</ul>
-
-<p>When a plain-text request is successful (HTTP status code 200), the response body contains 1 or 2 lines in the form of key/value pairs.
-The first line is always available and its content is either <code>id=<em>ID of sent message</em></code> or <code>Error=<em>GCM error code</em></code>. The second line, if available,
-has the format of <code>registration_id=<em>canonical ID</em></code>. The second line is optional, and it can only be sent if the first line is not an error. We recommend handling the plain-text response in a similar way as handling the JSON response:</p>
-<ul>
- <li>If first line starts with <code>id</code>, check second line:
- <ul>
- <li>If second line starts with <code>registration_id</code>, gets its value and replace the registration IDs in your server database.</li>
- </ul>
- </li>
- <li>Otherwise, get the value of <code>Error</code>:
- <ul>
- <li>If it is <code>NotRegistered</code>, remove the registration ID from your server database.</li>
- <li>Otherwise, there is probably a non-recoverable error (<strong>Note: </strong>Plain-text requests will never return <code>Unavailable</code> as the error code, they would have returned a 500 HTTP status instead).</li>
- </ul>
- </li>
-</ul>
-
-<h4 id="error_codes">Interpreting an error response</h4>
-<p>Here are the recommendations for handling the different types of error that might occur when trying to send a message to a device:</p>
-
-<dl>
-<dt id="missing_reg"><strong>Missing Registration ID</strong></dt>
-<dd>Check that the request contains a registration ID (either in the <code>registration_id</code> parameter in a plain text message, or in the <code>registration_ids</code> field in JSON).
-<br/>Happens when error code is <code>MissingRegistration</code>.</dd>
-
-<dt id="invalid_reg"><strong>Invalid Registration ID</strong></dt>
-<dd>Check the formatting of the registration ID that you pass to the server. Make sure it matches the registration ID the phone receives in the <code>com.google.android.c2dm.intent.REGISTRATION</code> intent and that you're not truncating it or adding additional characters.
-<br/>Happens when error code is <code>InvalidRegistration</code>.</dd>
-
-<dt id="mismatched_sender"><strong>Mismatched Sender</strong></dt>
-<dd>A registration ID is tied to a certain group of senders. When an application registers for GCM usage, it must specify which senders are allowed to send messages. Make sure you're using one of those when trying to send messages to the device. If you switch to a different sender, the existing registration IDs won't work.
-Happens when error code is <code>MismatchSenderId</code>.</dd>
-
-<dt id="unreg_device"><strong>Unregistered Device</strong></dt>
-<dd>An existing registration ID may cease to be valid in a number of scenarios, including:
-<ul>
- <li>If the application manually unregisters by issuing a <span class="prettyprint pretty-java"><code>com.google.android.c2dm.intent.UNREGISTER</code></span><code> </code>intent.</li>
- <li>If the application is automatically unregistered, which can happen (but is not guaranteed) if the user uninstalls the application.</li>
- <li>If the registration ID expires. Google might decide to refresh registration IDs. </li>
- <li>If the application is updated but the new version does not have a broadcast receiver configured to receive <code>com.google.android.c2dm.intent.RECEIVE</code> intents.</li>
-</ul>
-For all these cases, you should remove this registration ID from the 3rd-party server and stop using it to send
-messages.
-<br/>Happens when error code is <code>NotRegistered</code>.</dd>
-
-<dt id="big_msg"><strong>Message Too Big</strong></dt>
- <dd>The total size of the payload data that is included in a message can't exceed 4096 bytes. Note that this includes both the size of the keys as well as the values.
-<br/>Happens when error code is <code>MessageTooBig</code>.</dd>
-
-<dt id="invalid_datakey"><strong>Invalid Data Key</strong></dt>
-<dd>The payload data contains a key (such as <code>from</code> or any value prefixed by <code>google.</code>) that is used internally by GCM in the <code>com.google.android.c2dm.intent.RECEIVE</code> Intent and cannot be used. Note that some words (such as <code>collapse_key</code>) are also used by GCM but are allowed in the payload, in which case the payload value will be overridden by the GCM value.
-<br />
-Happens when the error code is <code>InvalidDataKey</code>.</dd>
-
-<dt id="ttl_error"><strong>Invalid Time To Live</strong></dt>
- <dd>The value for the Time to Live field must be an integer representing a duration in seconds between 0 and 2,419,200 (4 weeks). Happens when error code is <code>InvalidTtl</code>.
-</dd>
-
- <dt id="auth_error"><strong>Authentication Error</strong></dt>
- <dd>The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are: <ul>
-<li>Authorization header missing or with invalid syntax.</li>
-<li>Invalid project number sent as key.</li>
-<li>Key valid but with GCM service disabled.</li>
-<li>Request originated from a server not whitelisted in the Server Key IPs.</li>
-
-</ul>
-Check that the token you're sending inside the <code>Authorization</code> header is the correct API key associated with your project. You can check the validity of your API key by running the following command:<br/>
-
-<pre># api_key=YOUR_API_KEY
-
-# curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send -d "{\"registration_ids\":[\"ABC\"]}"</pre>
-
-
-If you receive a 401 HTTP status code, your API key is not valid. Otherwise you should see something like this:<br/>
-
-<pre>
-{"multicast_id":6782339717028231855,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
-</pre>
-If you want to confirm the validity of a registration ID, you can do so by replacing "ABC" with the registration ID.
-<br/>
-Happens when the HTTP status code is 401.
-
- <dt id="timeout"><strong>Timeout</strong></dt>
-
-<dd>The server couldn't process the request in time. You should retry the
-same request, but you MUST obey the following requirements:
-
-<ul>
-
-<li>Honor the <code>Retry-After</code> header if it's included in the response from the GCM server.</li>
-
-
-<li>Implement exponential back-off in your retry mechanism. This means an
-exponentially increasing delay after each failed retry (e.g. if you waited one
-second before the first retry, wait at least two second before the next one,
-then 4 seconds and so on). If you're sending multiple messages, delay each one
-independently by an additional random amount to avoid issuing a new request for
-all messages at the same time.</li>
-
-
-Senders that cause problems risk being blacklisted.
-<br />
-Happens when the HTTP status code is between 501 and 599, or when the <code>error</code> field of a JSON object in the results array is <code>Unavailable</code>.
-</dd>
-
-<dt id="internal_error"><strong>Internal Server Error</strong></dt>
-
-<dd>
-The server encountered an error while trying to process the request. You
-could retry the same request (obeying the requirements listed in the <a href="#timeout">Timeout</a>
-section), but if the error persists, please report the problem in the <a href="https://groups.google.com/forum/?fromgroups#!forum/android-gcm">android-gcm group</a>.
-<br />
-Happens when the HTTP status code is 500, or when the <code>error</code> field of a JSON
-object in the results array is <code>InternalServerError</code>.
-</dd>
-
-<dt id="restricted_package_name"><strong>Invalid Package Name</strong></dt>
-
-<dd>
-A message was addressed to a registration ID whose package name did not match the value passed in the request. Happens when error code is
-<code>InvalidPackageName</code>.
-</dd>
-
-
-</dl>
-<h4>Example responses</h4>
-<p>This section shows a few examples of responses indicating messages that were processed successfully. See <a href="#example-requests">Example requests</a> for the requests these responses are based on.</p>
-<p> Here is a simple case of a JSON message successfully sent to one recipient without canonical IDs in the response:</p>
-<pre class="prettyprint pretty-json">{ "multicast_id": 108,
- "success": 1,
- "failure": 0,
- "canonical_ids": 0,
- "results": [
- { "message_id": "1:08" }
- ]
-}</pre>
-
-<p>Or if the request was in plain-text format:</p>
-<pre class="prettyprint">id=1:08
-</pre>
-
-<p>Here are JSON results for 6 recipients (IDs 4, 8, 15, 16, 23, and 42 respectively) with 3 messages successfully processed, 1 canonical registration ID returned, and 3 errors:</p>
-<pre class="prettyprint pretty-json">{ "multicast_id": 216,
- "success": 3,
- "failure": 3,
- "canonical_ids": 1,
- "results": [
- { "message_id": "1:0408" },
- { "error": "Unavailable" },
- { "error": "InvalidRegistration" },
- { "message_id": "1:1516" },
- { "message_id": "1:2342", "registration_id": "32" },
- { "error": "NotRegistered"}
- ]
-}
-</pre>
-<p> In this example:</p>
-<ul>
- <li>First message: success, not required.</li>
- <li>Second message: should be resent (to registration ID 8).</li>
- <li>Third message: had an unrecoverable error (maybe the value got corrupted in the database).</li>
- <li>Fourth message: success, nothing required.</li>
- <li>Fifth message: success, but the registration ID should be updated in the server database (from 23 to 32).</li>
- <li>Sixth message: registration ID (42) should be removed from the server database because the application was uninstalled from the device.</li>
-</ul>
-<p>Or if just the 4th message above was sent using plain-text format:</p>
-<pre class="prettyprint">Error=InvalidRegistration
-</pre>
-<p>If the 5th message above was also sent using plain-text format:</p>
-<pre class="prettyprint">id=1:2342
-registration_id=32
-</pre>
-
-
-<h3 id="stats">Viewing statistics</h3>
-
-<p>To view statistics and any error messages for your GCM applications:</p>
-<ol>
- <li> Go to the <code><a href="http://play.google.com/apps/publish">Android Developer Console</a></code>.</li>
- <li>Login with your developer account.
- <p>You will see a page that has a list of all of your apps.</p></li>
- <li> Click on the &quot;statistics&quot; link next to the app for which you want to view GCM stats.
- <p>Now you are on the statistics page.</p> </li>
- <li>Go to the drop-down menu and select the GCM metric you want to view.
- </li>
-</ol>
-<p class="note"><strong>Note:</strong> Stats on the Google API Console are not enabled for GCM. You must use the <a href="http://play.google.com/apps/publish">Android Developer Console</a>.</p>
-
-<h2 id="example">Examples</h2>
-<p>See the <a href="demo.html">GCM Demo Application</a> document.</p>
-
diff --git a/docs/html/guide/google/gcm/gs.jd b/docs/html/guide/google/gcm/gs.jd
deleted file mode 100644
index fc5c4a2..0000000
--- a/docs/html/guide/google/gcm/gs.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=GCM: Getting Started
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Walk through the steps of creating a GCM app.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol class="toc">
-<li><a href="#create-proj">Creating a Google API Project</a></li>
-<li><a href="#gcm-service">Enabling the GCM Service</a></li>
-<li><a href="#access-key">Obtaining an API Key</a></li>
-<li><a href="#libs">Installing the Helper Libraries</a></li>
-<li><a href="#android-app">Writing the Android Application</a>
-<li><a href="#server-app">Writing the Server-side Application</a> </li>
-</ol>
-
-</div>
-</div>
-
-<p>This document describes how to write an Android application and the server-side logic, using the helper libraries (<a href="{@docRoot}guide/google/gcm/client-javadoc/index.html">client</a> and <a href="{@docRoot}guide/google/gcm/server-javadoc/index.html">server</a>) provided by GCM.</p>
-
-
-<h2 id="create-proj">Creating a Google API project</h2>
-<p>To create a Google API project:</p>
-<ol>
- <li>Open the <a href="https://code.google.com/apis/console">Google APIs Console page</a>.
- </li>
- <li>If you haven't created an API project yet, this page will prompt you to do so:
- <p><img src="{@docRoot}images/gcm/gcm-create-api-proj.png" class="screenshot" /></p>
-<p class="note"><strong>Note:</strong> If you already have existing projects, the first page you see will be the <strong>Dashboard</strong> page. From there you can create a new project by opening the project drop-down menu (upper left corner) and choosing <strong>Other projects > Create</strong>.</p></li>
- <li> Click <strong>Create project</strong>.
- Your browser URL will change to something like:</li>
-
-<pre> https://code.google.com/apis/console/#project:<strong>4815162342</strong></pre>
-
- <li> Take note of the value after <code>#project:</code> (4815162342 in this example). This is your project number, and it will be used later on as the GCM sender ID.</li>
-
-</ol>
-<h2 id="gcm-service">Enabling the GCM Service</h2>
-<p>To enable the GCM service:</p>
-<ol>
- <li> In the main Google APIs Console page, select <strong>Services</strong>.</li>
- <li>Turn the <strong>Google Cloud Messaging</strong> toggle to ON.</li>
- <li>In the Terms of Service page, accept the terms.
- </li>
-</ol>
-<h2 id="access-key">Obtaining an API Key</h2>
-<p>To obtain an API key:</p>
-<ol>
- <li> In the main Google APIs Console page, select <strong>API Access</strong>. You will see a screen that resembles the following:</li><br />
-
-<div style="width:408px;margin:1.5em;">
-<div style="width:410px;border:1px solid #DDD;">
-<img src="{@docRoot}images/gcm/gcm-api-access.png" style="width:400px;padding:4px;margin-bottom:0em;">
-</div>
-</div>
-
- <li>Click <strong>Create new Server key</strong>. Either a server key or a browser key should work. The advantage to using a server key is that it allows you to whitelist IP addresses. The following screen appears:</li><br />
-
-<div style="width:408px;margin:1.5em;">
-<div style="width:410px;border:1px solid #DDD;">
-<img src="{@docRoot}images/gcm/gcm-config-server-key.png" style="width:400px;padding:4px;margin-bottom:0em;">
-</div>
-</div>
-
- <li>Click <strong>Create</strong>:</li><br />
-
-<div style="width:408px;margin:1.5em;">
-<div style="width:410px;border:1px solid #DDD;">
-<img src="{@docRoot}images/gcm/gcm-api-key.png" style="width:400px;padding:4px;margin-bottom:0em;">
-</div>
-</div>
-
-
-</ol>
-<p> Take note of the <strong>API key</strong> value (<code>YourKeyWillBeShownHere</code>) in this example, as it will be used later on.</p>
-<p class="note"><strong>Note:</strong> If you need to rotate the key, click <strong>Generate new key</strong>. A new key will be created while the old one will still be active for up to 24 hours. If you want to get rid of the old key immediately (for example, if you feel it was compromised), click <strong>Delete key</strong>.</p>
-
-<h2 id="libs">Install the Helper Libraries</h2>
-<p>To perform the steps described in the following sections, you must first install the helper libraries (reference: <a href="{@docRoot}guide/google/gcm/client-javadoc/index.html">client</a> and <a href="{@docRoot}guide/google/gcm/server-javadoc/index.html">server</a>). From the SDK Manager, install <strong>Extras &gt; Google Cloud Messaging for Android Library</strong>. This creates a <code>gcm</code> directory under <code><em>YOUR_SDK_ROOT</em>/extras/google/</code> containing these subdirectories: <code>gcm-client</code>, <code>gcm-server</code>, <code>samples/gcm-demo-client</code>, <code>samples/gcm-demo-server</code>, and <code>samples/gcm-demo-appengine</code>.</p>
-
-<p class="note"><strong>Note:</strong> If you don't see <strong>Extras &gt; Google Cloud Messaging for Android Library</strong> in the SDK Manager, make sure you are running version 20 or higher. Be sure to restart the SDK Manager after updating it.</p>
-
-<h2 id="android-app">Writing the Android Application</h2>
-<p>This section describes the steps involved in writing an Android application that uses GCM.</p>
-<h4>Step 1: Copy the gcm.jar file into your application classpath</h4>
-<p> To write your Android application, first copy the <code>gcm.jar</code> file from the SDK's <code>gcm-client/dist</code> directory to your application classpath.</p>
-<h4>Step 2: Make the following changes in the application's Android manifest</h4>
-<ol>
- <li>GCM requires Android 2.2 or later, so if your application cannot work without GCM, add the following line, where <em>xx</em> is the latest target SDK version:</li>
-
-<pre class="prettyprint pretty-xml">&lt;uses-sdk android:minSdkVersion=&quot;8&quot; android:targetSdkVersion=&quot;xx&quot;/&gt;</pre>
-
- <li>Declare and use a custom permission so only this application can receive GCM messages:<br>
- </li>
-
-<pre class="prettyprint pretty-xml">&lt;permission android:name=&quot;my_app_package.permission.C2D_MESSAGE&quot; android:protectionLevel=&quot;signature&quot; /&gt;
-&lt;uses-permission android:name=&quot;my_app_package.permission.C2D_MESSAGE&quot; /&gt; </pre>
-<p> This permission must be called <code>my_app_package.permission.C2D_MESSAGE</code> (where <code>my_app_package</code> is the package name of your app as defined by the manifest tag), otherwise it will not work.</p>
-<p class="note"><strong>Note:</strong> This permission is not required if you are targeting your application to 4.1 or above (i.e., minSdkVersion 16)</p>
-
- <li>Add the following permissions:</li>
-
-<pre class="prettyprint pretty-xml">&lt;!-- App receives GCM messages. --&gt;
-&lt;uses-permission android:name=&quot;com.google.android.c2dm.permission.RECEIVE&quot; /&gt;
-&lt;!-- GCM connects to Google Services. --&gt;
-&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
-&lt;!-- GCM requires a Google account. --&gt;
-&lt;uses-permission android:name=&quot;android.permission.GET_ACCOUNTS&quot; /&gt;
-&lt;!-- Keeps the processor from sleeping when a message is received. --&gt;
-&lt;uses-permission android:name=&quot;android.permission.WAKE_LOCK&quot; /&gt;</pre>
-
- <li>Add the following broadcast receiver:</li>
-
-<pre class="prettyprint pretty-xml">&lt;receiver android:name=&quot;com.google.android.gcm.GCMBroadcastReceiver&quot; android:permission=&quot;com.google.android.c2dm.permission.SEND&quot; &gt;
- &lt;intent-filter&gt;
- &lt;action android:name=&quot;com.google.android.c2dm.intent.RECEIVE&quot; /&gt;
- &lt;action android:name=&quot;com.google.android.c2dm.intent.REGISTRATION&quot; /&gt;
- &lt;category android:name=&quot;my_app_package&quot; /&gt;
- &lt;/intent-filter&gt;
-&lt;/receiver&gt;</pre>
-<p> This broadcast receiver is responsible for handling the 2 intents that can be sent by GCM (<code>com.google.android.c2dm.intent.RECEIVE</code> and <code>com.google.android.c2dm.intent.REGISTRATION</code>) and should be defined in the manifest (rather than programmatically) so that these intents can be received even if the application is not running. By setting the <code>com.google.android.c2dm.permission.SEND</code> permission, you are ensuring that only intents sent by the GCM system framework are sent to the receiver (a regular application cannot issue intents with that permission).</p>
-<p> Notice that <code>android:name</code> in the category tag must be replaced by your application's package name (and the category tag is not required for applications targeted to minSdkVersion 16 and higher).<br>
- </p>
-
- <li>Add the following intent service:</li>
-
-
- <pre class="prettyprint pretty-xml">&lt;service android:name=&quot;.GCMIntentService&quot; /&gt;</pre>
-
-</ol>
-<p>This intent service will be called by the <code>GCMBroadcastReceiver</code> (which is is provided by GCM library), as shown in the next step. It must be a subclass of <code>com.google.android.gcm.GCMBaseIntentService</code>, must contain a public constructor, and should be named <code>my_app_package.GCMIntentService</code> (unless you use a subclass of <code>GCMBroadcastReceiver</code> that overrides the method used to name the service).</p>
-
-<p>The intent service must also define its sender ID(s). It does this as follows:</p>
-<ul>
- <li>If the value is static, the service's default constructor should call <code>super(senderIds)</code>.</li>
- <li>If the value is dynamic, the service should override the <code>getSenderIds()</code> method.</li>
-</ul>
-
-
-<h4>Step 3: Write the my_app_package.GCMIntentService class</h4>
-
-<p>Next write the <code>my_app_package.GCMIntentService</code> class, overriding the following callback methods (which are called by <code>GCMBroadcastReceiver</code>):<br>
-</p>
-<ul>
- <li><code>onRegistered(Context context, String regId)</code>: Called after a registration intent is received, passes the registration ID assigned by GCM to that device/application pair as parameter. Typically, you should send the <code>regid</code> to your server so it can use it to send messages to this device.</li>
- <li><code>onUnregistered(Context context, String regId)</code>: Called after the device has been unregistered from GCM. Typically, you should send the <code>regid</code> to the server so it unregisters the device.</li>
- <li><code>onMessage(Context context, Intent intent)</code>: Called when your server sends a message to GCM, and GCM delivers it to the device. If the message has a payload, its contents are available as extras in the intent.</li>
- <li><code>onError(Context context, String errorId)</code>: Called when the device tries to register or unregister, but GCM returned an error. Typically, there is nothing to be done other than evaluating the error (returned by errorId) and trying to fix the problem.</li>
- <li> <code>onRecoverableError(Context context, String errorId)</code>: Called when the device tries to register or unregister, but the GCM servers are unavailable. The GCM library will retry the operation using exponential backup, unless this method is overridden and returns false. This method is optional and should be overridden only if you want to display the message to the user or cancel the retry attempts.
- </li>
-</ul>
-
-<p class="note"><strong>Note:</strong> The methods above run in the intent service's thread and hence are free to make network calls without the risk of blocking the UI thread.</p>
-
-<h4> Step 4: Write your application's main activity</h4>
-Add the following import statement in your application's main activity:
-<pre class="prettyprint pretty-java">import com.google.android.gcm.GCMRegistrar;</pre>
-<p> In the <code>onCreate()</code> method, add the following code:</p>
-<pre class="prettyprint pretty-java">GCMRegistrar.checkDevice(this);
-GCMRegistrar.checkManifest(this);
-final String regId = GCMRegistrar.getRegistrationId(this);
-if (regId.equals("")) {
- GCMRegistrar.register(this, SENDER_ID);
-} else {
- Log.v(TAG, "Already registered");
-}</pre>
-<p>The <code>checkDevice()</code> method verifies that the device supports GCM and throws an exception if it does not (for instance, if it is an emulator that does not contain the Google APIs). Similarly, the <code>checkManifest()</code> method verifies that the application manifest contains meets all the requirements described in <a href="#android-app">Writing the Android Application</a> (this method is only necessary when you are developing the application; once the application is ready to be published, you can remove it).</p>
-
-<p>Once the sanity checks are done, the device calls <code>GCMRegsistrar.register()</code> to register the device, passing the <code>SENDER_ID</code> you got when you signed up for GCM. But since the <code>GCMRegistrar</code> singleton keeps track of the registration ID upon the arrival of registration intents, you can call <code>GCMRegistrar.getRegistrationId()</code> first to check if the device is already registered.</p>
-<p class="note"><strong>Note:</strong> It is possible that the device was successfully registered to GCM but failed to send the registration ID to your server, in which case you should retry. See <a href="adv.html#reg-state">Advanced Topics</a> for more details on how to handle this scenario.</p>
-
-<h2 id="server-app">Writing the Server-side Application</h2>
-
-<p>To write the server-side application:</p>
-<ol>
- <li> Copy the <code>gcm-server.jar</code> file from the SDK's <code>gcm-server/dist</code> directory to your server classpath.</li>
- <li>Create a servlet (or other server-side mechanism) that can be used by the Android application to send the registration ID received by GCM . The application might also need to send other information&mdash;such as the user's email address or username&mdash;so that the server can associate the registration ID with the user owning the device.</li>
- <li>Similarly, create a servlet used to unregister registration IDs.<br>
- </li>
-<li>When the server needs to send a message to the registration ID, it can use the <code>com.google.android.gcm.server.Sender</code> helper class from the GCM library. For example:</li>
-</ol>
-
-<pre class="prettyprint pretty-java">import com.google.android.gcm.server.*;
-
-Sender sender = new Sender(myApiKey);
-Message message = new Message.Builder().build();
-MulticastResult result = sender.send(message, devices, 5);</pre>
-
-<p> The snippet above does the following:
-<ul>
-<li>Creates a <code>Sender</code> object using your project's API key.</li>
-<li>Creates a message using a given registration ID (the message builder also has methods to set all message parameters such as the collapse key and payload data).</li>
-<li>Sends the message with a maximum of 5 retry attempts (in case the GCM servers are unavailable), and stores the response on result. </li>
-</ul>
-<p>It's now necessary to parse the result and take the proper action in the following cases:</p>
-<ul>
- <li>If the message was created but the result returned a canonical registration ID, it's necessary to replace the current registration ID with the canonical one.</li>
- <li>If the returned error is <code>NotRegistered</code>, it's necessary to remove that registration ID, because the application was uninstalled from the device.</li>
-</ul>
-<p> Here's a code snippet that handles these 2 conditions:</p>
-<pre class="prettyprint pretty-java">
-if (result.getMessageId() != null) {
- String canonicalRegId = result.getCanonicalRegistrationId();
- if (canonicalRegId != null) {
- // same device has more than on registration ID: update database
- }
-} else {
- String error = result.getErrorCodeName();
- if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
- // application has been removed from device - unregister database
- }
-}</pre>
diff --git a/docs/html/guide/google/gcm/index.jd b/docs/html/guide/google/gcm/index.jd
deleted file mode 100644
index 8079eba..0000000
--- a/docs/html/guide/google/gcm/index.jd
+++ /dev/null
@@ -1,28 +0,0 @@
-page.title=Google Cloud Messaging for Android
-@jd:body
-
-
-<p><img src="{@docRoot}images/gcm/gcm-logo.png" /></p>
-<p>Google Cloud Messaging for Android (GCM) is a service that helps developers send data from servers to their Android applications on Android devices. This could be a lightweight message telling the Android application that there is new data to be fetched from the server (for instance, a movie uploaded by a friend), or it could be a message containing up to 4kb of payload data (so apps like instant messaging can consume the message directly). The GCM service handles all aspects of queueing of messages and delivery to the target Android application running on the target device.</p>
-
-<p>GCM is completely free no matter how big your messaging needs are, and there are no quotas.</p>
-
-<p>To learn more about GCM, you can join the <a href="https://groups.google.com/forum/?fromgroups#!forum/android-gcm">android-gcm group</a> and read the following documents:</p>
-
-<dl>
- <dt><strong><a href="{@docRoot}guide/google/gcm/gs.html">Getting Started</a></strong></dt>
- <dd>Read this document to learn the basic steps involved in developing Android applications based on GCM.</dd>
- <dt><strong><a href="{@docRoot}guide/google/gcm/gcm.html">Architectural Overview</a></strong></dt>
- <dd>Read this document for a description of the underlying concepts and architecture in GCM.</dd>
- <dt><strong><a href="{@docRoot}guide/google/gcm/demo.html">Demo App Tutorial</a></strong></dt>
- <dd>Read this document to walk through setting up and running the GCM demo app.</dd>
- <dt><strong><a href="{@docRoot}guide/google/gcm/adv.html">Advanced Topics</a></strong></dt>
- <dd>Read this document to get a more in-depth understanding of key GCM features.</dd>
- <dt><a href="{@docRoot}guide/google/gcm/c2dm.html"><strong>Migration</strong></a></dt>
- <dd>Read this document if you are a C2DM developer moving to GCM.</dd>
-</dl>
-
-<p>GCM also provides helper libraries for <a href="{@docRoot}guide/google/gcm/client-javadoc/index.html"><strong>client</strong></a> and <a href="{@docRoot}guide/google/gcm/server-javadoc/index.html"><strong>server</strong></a> development.</p>
-
-
-
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
deleted file mode 100644
index 80ee784..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-frame.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-All Classes
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server" target="classFrame">Constants</A>
-<BR>
-<A HREF="com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server" target="classFrame">InvalidRequestException</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server" target="classFrame">Message</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server" target="classFrame">Message.Builder</A>
-<BR>
-<A HREF="com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server" target="classFrame">MulticastResult</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server" target="classFrame">Result</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server" target="classFrame">Sender</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html b/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
deleted file mode 100644
index 966598d..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/allclasses-noframe.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-All Classes
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameHeadingFont">
-<B>All Classes</B></FONT>
-<BR>
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<BR>
-<A HREF="com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<BR>
-<A HREF="com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>
-<BR>
-<A HREF="com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<BR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
deleted file mode 100644
index 515bba4..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
+++ /dev/null
@@ -1,807 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Constants
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Constants";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Constants.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Constants.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class Constants</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.Constants</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Constants</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-Constants used on GCM service communication.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_DEVICE_QUOTA_EXCEEDED">ERROR_DEVICE_QUOTA_EXCEEDED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Too many messages sent by the sender to a specific device.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_INTERNAL_SERVER_ERROR">ERROR_INTERNAL_SERVER_ERROR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A particular message could not be sent because the GCM servers encountered
- an error.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_INVALID_REGISTRATION">ERROR_INVALID_REGISTRATION</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bad registration_id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_INVALID_TTL">ERROR_INVALID_TTL</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Time to Live value passed is less than zero or more than maximum.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_MESSAGE_TOO_BIG">ERROR_MESSAGE_TOO_BIG</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The payload of the message is too big, see the limitations.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_MISMATCH_SENDER_ID">ERROR_MISMATCH_SENDER_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The sender_id contained in the registration_id does not match the
- sender_id used to register with the GCM servers.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_MISSING_COLLAPSE_KEY">ERROR_MISSING_COLLAPSE_KEY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collapse key is required.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_MISSING_REGISTRATION">ERROR_MISSING_REGISTRATION</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Missing registration_id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_NOT_REGISTERED">ERROR_NOT_REGISTERED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The user has uninstalled the application or turned off notifications.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_QUOTA_EXCEEDED">ERROR_QUOTA_EXCEEDED</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Too many messages sent by the sender.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#ERROR_UNAVAILABLE">ERROR_UNAVAILABLE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A particular message could not be sent because the GCM servers were not
- available.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#GCM_SEND_ENDPOINT">GCM_SEND_ENDPOINT</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint for sending messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_CANONICAL_IDS">JSON_CANONICAL_IDS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the number of messages with a canonical
- registration id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_ERROR">JSON_ERROR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the error field of an individual request.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_FAILURE">JSON_FAILURE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the number of failed messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_MESSAGE_ID">JSON_MESSAGE_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field sent by GCM when a message was successfully sent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_MULTICAST_ID">JSON_MULTICAST_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the id of the multicast request.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_PAYLOAD">JSON_PAYLOAD</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the payload data.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_REGISTRATION_IDS">JSON_REGISTRATION_IDS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the registration ids.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_RESULTS">JSON_RESULTS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the result of each individual request.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#JSON_SUCCESS">JSON_SUCCESS</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSON-only field representing the number of successful messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#PARAM_COLLAPSE_KEY">PARAM_COLLAPSE_KEY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP parameter for collapse key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#PARAM_DELAY_WHILE_IDLE">PARAM_DELAY_WHILE_IDLE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP parameter for delaying the message delivery if the device is idle.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#PARAM_PAYLOAD_PREFIX">PARAM_PAYLOAD_PREFIX</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prefix to HTTP parameter used to pass key-values in the message payload.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#PARAM_REGISTRATION_ID">PARAM_REGISTRATION_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP parameter for registration id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#PARAM_TIME_TO_LIVE">PARAM_TIME_TO_LIVE</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prefix to HTTP parameter used to set the message time-to-live.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#TOKEN_CANONICAL_REG_ID">TOKEN_CANONICAL_REG_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token returned by GCM when the requested registration id has a canonical
- value.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#TOKEN_ERROR">TOKEN_ERROR</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token returned by GCM when there was an error sending a message.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html#TOKEN_MESSAGE_ID">TOKEN_MESSAGE_ID</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token returned by GCM when a message was successfully sent.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="GCM_SEND_ENDPOINT"><!-- --></A><H3>
-GCM_SEND_ENDPOINT</H3>
-<PRE>
-public static final java.lang.String <B>GCM_SEND_ENDPOINT</B></PRE>
-<DL>
-<DD>Endpoint for sending messages.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.GCM_SEND_ENDPOINT">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PARAM_REGISTRATION_ID"><!-- --></A><H3>
-PARAM_REGISTRATION_ID</H3>
-<PRE>
-public static final java.lang.String <B>PARAM_REGISTRATION_ID</B></PRE>
-<DL>
-<DD>HTTP parameter for registration id.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.PARAM_REGISTRATION_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PARAM_COLLAPSE_KEY"><!-- --></A><H3>
-PARAM_COLLAPSE_KEY</H3>
-<PRE>
-public static final java.lang.String <B>PARAM_COLLAPSE_KEY</B></PRE>
-<DL>
-<DD>HTTP parameter for collapse key.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.PARAM_COLLAPSE_KEY">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PARAM_DELAY_WHILE_IDLE"><!-- --></A><H3>
-PARAM_DELAY_WHILE_IDLE</H3>
-<PRE>
-public static final java.lang.String <B>PARAM_DELAY_WHILE_IDLE</B></PRE>
-<DL>
-<DD>HTTP parameter for delaying the message delivery if the device is idle.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.PARAM_DELAY_WHILE_IDLE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PARAM_PAYLOAD_PREFIX"><!-- --></A><H3>
-PARAM_PAYLOAD_PREFIX</H3>
-<PRE>
-public static final java.lang.String <B>PARAM_PAYLOAD_PREFIX</B></PRE>
-<DL>
-<DD>Prefix to HTTP parameter used to pass key-values in the message payload.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.PARAM_PAYLOAD_PREFIX">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="PARAM_TIME_TO_LIVE"><!-- --></A><H3>
-PARAM_TIME_TO_LIVE</H3>
-<PRE>
-public static final java.lang.String <B>PARAM_TIME_TO_LIVE</B></PRE>
-<DL>
-<DD>Prefix to HTTP parameter used to set the message time-to-live.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.PARAM_TIME_TO_LIVE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_QUOTA_EXCEEDED"><!-- --></A><H3>
-ERROR_QUOTA_EXCEEDED</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_QUOTA_EXCEEDED</B></PRE>
-<DL>
-<DD>Too many messages sent by the sender. Retry after a while.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_QUOTA_EXCEEDED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_DEVICE_QUOTA_EXCEEDED"><!-- --></A><H3>
-ERROR_DEVICE_QUOTA_EXCEEDED</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_DEVICE_QUOTA_EXCEEDED</B></PRE>
-<DL>
-<DD>Too many messages sent by the sender to a specific device.
- Retry after a while.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_DEVICE_QUOTA_EXCEEDED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_MISSING_REGISTRATION"><!-- --></A><H3>
-ERROR_MISSING_REGISTRATION</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_MISSING_REGISTRATION</B></PRE>
-<DL>
-<DD>Missing registration_id.
- Sender should always add the registration_id to the request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_MISSING_REGISTRATION">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_INVALID_REGISTRATION"><!-- --></A><H3>
-ERROR_INVALID_REGISTRATION</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_INVALID_REGISTRATION</B></PRE>
-<DL>
-<DD>Bad registration_id. Sender should remove this registration_id.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_INVALID_REGISTRATION">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_MISMATCH_SENDER_ID"><!-- --></A><H3>
-ERROR_MISMATCH_SENDER_ID</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_MISMATCH_SENDER_ID</B></PRE>
-<DL>
-<DD>The sender_id contained in the registration_id does not match the
- sender_id used to register with the GCM servers.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_MISMATCH_SENDER_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_NOT_REGISTERED"><!-- --></A><H3>
-ERROR_NOT_REGISTERED</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_NOT_REGISTERED</B></PRE>
-<DL>
-<DD>The user has uninstalled the application or turned off notifications.
- Sender should stop sending messages to this device and delete the
- registration_id. The client needs to re-register with the GCM servers to
- receive notifications again.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_NOT_REGISTERED">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_MESSAGE_TOO_BIG"><!-- --></A><H3>
-ERROR_MESSAGE_TOO_BIG</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_MESSAGE_TOO_BIG</B></PRE>
-<DL>
-<DD>The payload of the message is too big, see the limitations.
- Reduce the size of the message.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_MESSAGE_TOO_BIG">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_MISSING_COLLAPSE_KEY"><!-- --></A><H3>
-ERROR_MISSING_COLLAPSE_KEY</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_MISSING_COLLAPSE_KEY</B></PRE>
-<DL>
-<DD>Collapse key is required. Include collapse key in the request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_MISSING_COLLAPSE_KEY">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_UNAVAILABLE"><!-- --></A><H3>
-ERROR_UNAVAILABLE</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_UNAVAILABLE</B></PRE>
-<DL>
-<DD>A particular message could not be sent because the GCM servers were not
- available. Used only on JSON requests, as in plain text requests
- unavailability is indicated by a 503 response.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_UNAVAILABLE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_INTERNAL_SERVER_ERROR"><!-- --></A><H3>
-ERROR_INTERNAL_SERVER_ERROR</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_INTERNAL_SERVER_ERROR</B></PRE>
-<DL>
-<DD>A particular message could not be sent because the GCM servers encountered
- an error. Used only on JSON requests, as in plain text requests internal
- errors are indicated by a 500 response.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_INTERNAL_SERVER_ERROR">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="ERROR_INVALID_TTL"><!-- --></A><H3>
-ERROR_INVALID_TTL</H3>
-<PRE>
-public static final java.lang.String <B>ERROR_INVALID_TTL</B></PRE>
-<DL>
-<DD>Time to Live value passed is less than zero or more than maximum.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.ERROR_INVALID_TTL">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="TOKEN_MESSAGE_ID"><!-- --></A><H3>
-TOKEN_MESSAGE_ID</H3>
-<PRE>
-public static final java.lang.String <B>TOKEN_MESSAGE_ID</B></PRE>
-<DL>
-<DD>Token returned by GCM when a message was successfully sent.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.TOKEN_MESSAGE_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="TOKEN_CANONICAL_REG_ID"><!-- --></A><H3>
-TOKEN_CANONICAL_REG_ID</H3>
-<PRE>
-public static final java.lang.String <B>TOKEN_CANONICAL_REG_ID</B></PRE>
-<DL>
-<DD>Token returned by GCM when the requested registration id has a canonical
- value.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.TOKEN_CANONICAL_REG_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="TOKEN_ERROR"><!-- --></A><H3>
-TOKEN_ERROR</H3>
-<PRE>
-public static final java.lang.String <B>TOKEN_ERROR</B></PRE>
-<DL>
-<DD>Token returned by GCM when there was an error sending a message.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.TOKEN_ERROR">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_REGISTRATION_IDS"><!-- --></A><H3>
-JSON_REGISTRATION_IDS</H3>
-<PRE>
-public static final java.lang.String <B>JSON_REGISTRATION_IDS</B></PRE>
-<DL>
-<DD>JSON-only field representing the registration ids.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_REGISTRATION_IDS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_PAYLOAD"><!-- --></A><H3>
-JSON_PAYLOAD</H3>
-<PRE>
-public static final java.lang.String <B>JSON_PAYLOAD</B></PRE>
-<DL>
-<DD>JSON-only field representing the payload data.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_PAYLOAD">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_SUCCESS"><!-- --></A><H3>
-JSON_SUCCESS</H3>
-<PRE>
-public static final java.lang.String <B>JSON_SUCCESS</B></PRE>
-<DL>
-<DD>JSON-only field representing the number of successful messages.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_SUCCESS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_FAILURE"><!-- --></A><H3>
-JSON_FAILURE</H3>
-<PRE>
-public static final java.lang.String <B>JSON_FAILURE</B></PRE>
-<DL>
-<DD>JSON-only field representing the number of failed messages.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_FAILURE">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_CANONICAL_IDS"><!-- --></A><H3>
-JSON_CANONICAL_IDS</H3>
-<PRE>
-public static final java.lang.String <B>JSON_CANONICAL_IDS</B></PRE>
-<DL>
-<DD>JSON-only field representing the number of messages with a canonical
- registration id.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_CANONICAL_IDS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_MULTICAST_ID"><!-- --></A><H3>
-JSON_MULTICAST_ID</H3>
-<PRE>
-public static final java.lang.String <B>JSON_MULTICAST_ID</B></PRE>
-<DL>
-<DD>JSON-only field representing the id of the multicast request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_MULTICAST_ID">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_RESULTS"><!-- --></A><H3>
-JSON_RESULTS</H3>
-<PRE>
-public static final java.lang.String <B>JSON_RESULTS</B></PRE>
-<DL>
-<DD>JSON-only field representing the result of each individual request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_RESULTS">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_ERROR"><!-- --></A><H3>
-JSON_ERROR</H3>
-<PRE>
-public static final java.lang.String <B>JSON_ERROR</B></PRE>
-<DL>
-<DD>JSON-only field representing the error field of an individual request.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_ERROR">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="JSON_MESSAGE_ID"><!-- --></A><H3>
-JSON_MESSAGE_ID</H3>
-<PRE>
-public static final java.lang.String <B>JSON_MESSAGE_ID</B></PRE>
-<DL>
-<DD>JSON-only field sent by GCM when a message was successfully sent.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Constants.JSON_MESSAGE_ID">Constant Field Values</A></DL>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV CLASS&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Constants.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Constants.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_java.lang.Object">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;METHOD</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
deleted file mode 100644
index bb0974c..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-InvalidRequestException
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="InvalidRequestException";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/InvalidRequestException.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="InvalidRequestException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class InvalidRequestException</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by ">java.lang.Throwable
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by ">java.lang.Exception
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by ">java.io.IOException
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.InvalidRequestException</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>InvalidRequestException</B><DT>extends java.io.IOException</DL>
-</PRE>
-
-<P>
-Exception thrown when GCM returned an error due to an invalid request.
- <p>
- This is equivalent to GCM posts that return an HTTP error different of 200.
-<P>
-
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../serialized-form.html#com.google.android.gcm.server.InvalidRequestException">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html#InvalidRequestException(int)">InvalidRequestException</A></B>(int&nbsp;status)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html#InvalidRequestException(int, java.lang.String)">InvalidRequestException</A></B>(int&nbsp;status,
- java.lang.String&nbsp;description)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html#getDescription()">getDescription</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the error description.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html#getHttpStatusCode()">getHttpStatusCode</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the HTTP Status Code.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Throwable"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Throwable</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="InvalidRequestException(int)"><!-- --></A><H3>
-InvalidRequestException</H3>
-<PRE>
-public <B>InvalidRequestException</B>(int&nbsp;status)</PRE>
-<DL>
-</DL>
-<HR>
-
-<A NAME="InvalidRequestException(int, java.lang.String)"><!-- --></A><H3>
-InvalidRequestException</H3>
-<PRE>
-public <B>InvalidRequestException</B>(int&nbsp;status,
- java.lang.String&nbsp;description)</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getHttpStatusCode()"><!-- --></A><H3>
-getHttpStatusCode</H3>
-<PRE>
-public int <B>getHttpStatusCode</B>()</PRE>
-<DL>
-<DD>Gets the HTTP Status Code.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getDescription()"><!-- --></A><H3>
-getDescription</H3>
-<PRE>
-public java.lang.String <B>getDescription</B>()</PRE>
-<DL>
-<DD>Gets the error description.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/InvalidRequestException.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="InvalidRequestException.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
deleted file mode 100644
index c2ee648..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
+++ /dev/null
@@ -1,337 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Message.Builder
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Message.Builder";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Message.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Message.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class Message.Builder</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.Message.Builder</B>
-</PRE>
-<DL>
-<DT><B>Enclosing class:</B><DD><A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A></DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public static final class <B>Message.Builder</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-<HR>
-
-<P>
-
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#Message.Builder()">Message.Builder</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#addData(java.lang.String, java.lang.String)">addData</A></B>(java.lang.String&nbsp;key,
- java.lang.String&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a key/value pair to the payload data.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#build()">build</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#collapseKey(java.lang.String)">collapseKey</A></B>(java.lang.String&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the collapseKey property.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#delayWhileIdle(boolean)">delayWhileIdle</A></B>(boolean&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the delayWhileIdle property (default value is false).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html#timeToLive(int)">timeToLive</A></B>(int&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the time to live, in seconds.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="Message.Builder()"><!-- --></A><H3>
-Message.Builder</H3>
-<PRE>
-public <B>Message.Builder</B>()</PRE>
-<DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="collapseKey(java.lang.String)"><!-- --></A><H3>
-collapseKey</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A> <B>collapseKey</B>(java.lang.String&nbsp;value)</PRE>
-<DL>
-<DD>Sets the collapseKey property.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="delayWhileIdle(boolean)"><!-- --></A><H3>
-delayWhileIdle</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A> <B>delayWhileIdle</B>(boolean&nbsp;value)</PRE>
-<DL>
-<DD>Sets the delayWhileIdle property (default value is false).
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="timeToLive(int)"><!-- --></A><H3>
-timeToLive</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A> <B>timeToLive</B>(int&nbsp;value)</PRE>
-<DL>
-<DD>Sets the time to live, in seconds.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addData(java.lang.String, java.lang.String)"><!-- --></A><H3>
-addData</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A> <B>addData</B>(java.lang.String&nbsp;key,
- java.lang.String&nbsp;value)</PRE>
-<DL>
-<DD>Adds a key/value pair to the payload data.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="build()"><!-- --></A><H3>
-build</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A> <B>build</B>()</PRE>
-<DL>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Message.Builder.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Message.Builder.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
deleted file mode 100644
index 5dbd262..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Message
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Message";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Message.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Message.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class Message</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.Message</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Message</B><DT>extends java.lang.Object<DT>implements java.io.Serializable</DL>
-</PRE>
-
-<P>
-GCM message.
-
- <p>
- Instances of this class are immutable and should be created using a
- <A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><CODE>Message.Builder</CODE></A>. Examples:
-
- <strong>Simplest message:</strong>
- <pre><code>
- Message message = new Message.Builder().build();
- </pre></code>
-
- <strong>Message with optional attributes:</strong>
- <pre><code>
- Message message = new Message.Builder()
- .collapseKey(collapseKey)
- .timeToLive(3)
- .delayWhileIdle(true)
- .build();
- </pre></code>
-
- <strong>Message with optional attributes and payload data:</strong>
- <pre><code>
- Message message = new Message.Builder()
- .collapseKey(collapseKey)
- .timeToLive(3)
- .delayWhileIdle(true)
- .addData("key1", "value1")
- .addData("key2", "value2")
- .build();
- </pre></code>
-<P>
-
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../serialized-form.html#com.google.android.gcm.server.Message">Serialized Form</A></DL>
-<HR>
-
-<P>
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-
-<A NAME="nested_class_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Nested Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>static&nbsp;class</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.html#getCollapseKey()">getCollapseKey</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the collapse key.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.html#getData()">getData</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the payload data, which is immutable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.Integer</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.html#getTimeToLive()">getTimeToLive</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the time to live (in seconds).</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.Boolean</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.html#isDelayWhileIdle()">isDelayWhileIdle</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the delayWhileIdle flag.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Message.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getCollapseKey()"><!-- --></A><H3>
-getCollapseKey</H3>
-<PRE>
-public java.lang.String <B>getCollapseKey</B>()</PRE>
-<DL>
-<DD>Gets the collapse key.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="isDelayWhileIdle()"><!-- --></A><H3>
-isDelayWhileIdle</H3>
-<PRE>
-public java.lang.Boolean <B>isDelayWhileIdle</B>()</PRE>
-<DL>
-<DD>Gets the delayWhileIdle flag.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getTimeToLive()"><!-- --></A><H3>
-getTimeToLive</H3>
-<PRE>
-public java.lang.Integer <B>getTimeToLive</B>()</PRE>
-<DL>
-<DD>Gets the time to live (in seconds).
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getData()"><!-- --></A><H3>
-getData</H3>
-<PRE>
-public java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>getData</B>()</PRE>
-<DL>
-<DD>Gets the payload data, which is immutable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Message.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Message.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
deleted file mode 100644
index 0721488..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
+++ /dev/null
@@ -1,397 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-MulticastResult
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="MulticastResult";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/MulticastResult.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="MulticastResult.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class MulticastResult</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.MulticastResult</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>MulticastResult</B><DT>extends java.lang.Object<DT>implements java.io.Serializable</DL>
-</PRE>
-
-<P>
-Result of a GCM multicast message request .
-<P>
-
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../serialized-form.html#com.google.android.gcm.server.MulticastResult">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getCanonicalIds()">getCanonicalIds</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the number of successful messages that also returned a canonical
- registration id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getFailure()">getFailure</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the number of failed messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;long</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getMulticastId()">getMulticastId</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the multicast id.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.util.List&lt;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getResults()">getResults</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the results of each individual message, which is immutable.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.util.List&lt;java.lang.Long&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getRetryMulticastIds()">getRetryMulticastIds</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets additional ids if more than one multicast message was sent.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getSuccess()">getSuccess</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the number of successful messages.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#getTotal()">getTotal</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the total number of messages sent, regardless of the status.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getMulticastId()"><!-- --></A><H3>
-getMulticastId</H3>
-<PRE>
-public long <B>getMulticastId</B>()</PRE>
-<DL>
-<DD>Gets the multicast id.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getSuccess()"><!-- --></A><H3>
-getSuccess</H3>
-<PRE>
-public int <B>getSuccess</B>()</PRE>
-<DL>
-<DD>Gets the number of successful messages.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getTotal()"><!-- --></A><H3>
-getTotal</H3>
-<PRE>
-public int <B>getTotal</B>()</PRE>
-<DL>
-<DD>Gets the total number of messages sent, regardless of the status.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getFailure()"><!-- --></A><H3>
-getFailure</H3>
-<PRE>
-public int <B>getFailure</B>()</PRE>
-<DL>
-<DD>Gets the number of failed messages.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getCanonicalIds()"><!-- --></A><H3>
-getCanonicalIds</H3>
-<PRE>
-public int <B>getCanonicalIds</B>()</PRE>
-<DL>
-<DD>Gets the number of successful messages that also returned a canonical
- registration id.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getResults()"><!-- --></A><H3>
-getResults</H3>
-<PRE>
-public java.util.List&lt;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>&gt; <B>getResults</B>()</PRE>
-<DL>
-<DD>Gets the results of each individual message, which is immutable.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getRetryMulticastIds()"><!-- --></A><H3>
-getRetryMulticastIds</H3>
-<PRE>
-public java.util.List&lt;java.lang.Long&gt; <B>getRetryMulticastIds</B>()</PRE>
-<DL>
-<DD>Gets additional ids if more than one multicast message was sent.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/MulticastResult.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="MulticastResult.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
deleted file mode 100644
index a4aad29..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
+++ /dev/null
@@ -1,322 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Result
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Result";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Result.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Result.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class Result</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.Result</B>
-</PRE>
-<DL>
-<DT><B>All Implemented Interfaces:</B> <DD>java.io.Serializable</DD>
-</DL>
-<HR>
-<DL>
-<DT><PRE>public final class <B>Result</B><DT>extends java.lang.Object<DT>implements java.io.Serializable</DL>
-</PRE>
-
-<P>
-Result of a GCM message request that returned HTTP status code 200.
-
- <p>
- If the message is successfully created, the <A HREF="../../../../../com/google/android/gcm/server/Result.html#getMessageId()"><CODE>getMessageId()</CODE></A> returns
- the message id and <A HREF="../../../../../com/google/android/gcm/server/Result.html#getErrorCodeName()"><CODE>getErrorCodeName()</CODE></A> returns null;
- otherwise, <A HREF="../../../../../com/google/android/gcm/server/Result.html#getMessageId()"><CODE>getMessageId()</CODE></A> returns null and
- <A HREF="../../../../../com/google/android/gcm/server/Result.html#getErrorCodeName()"><CODE>getErrorCodeName()</CODE></A> returns the code of the error.
-
- <p>
- There are cases when a request is accept and the message successfully
- created, but GCM has a canonical registration id for that device. In this
- case, the server should update the registration id to avoid rejected requests
- in the future.
-
- <p>
- In a nutshell, the workflow to handle a result is:
- <pre>
- - Call <A HREF="../../../../../com/google/android/gcm/server/Result.html#getMessageId()"><CODE>getMessageId()</CODE></A>:
- - null means error, call <A HREF="../../../../../com/google/android/gcm/server/Result.html#getErrorCodeName()"><CODE>getErrorCodeName()</CODE></A>
- - non-null means the message was created:
- - Call <A HREF="../../../../../com/google/android/gcm/server/Result.html#getCanonicalRegistrationId()"><CODE>getCanonicalRegistrationId()</CODE></A>
- - if it returns null, do nothing.
- - otherwise, update the server datastore with the new id.
- </pre>
-<P>
-
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../serialized-form.html#com.google.android.gcm.server.Result">Serialized Form</A></DL>
-<HR>
-
-<P>
-
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Result.html#getCanonicalRegistrationId()">getCanonicalRegistrationId</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the canonical registration id, if any.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Result.html#getErrorCodeName()">getErrorCodeName</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the error code, if any.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Result.html#getMessageId()">getMessageId</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the message id, if any.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Result.html#toString()">toString</A></B>()</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="getMessageId()"><!-- --></A><H3>
-getMessageId</H3>
-<PRE>
-public java.lang.String <B>getMessageId</B>()</PRE>
-<DL>
-<DD>Gets the message id, if any.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getCanonicalRegistrationId()"><!-- --></A><H3>
-getCanonicalRegistrationId</H3>
-<PRE>
-public java.lang.String <B>getCanonicalRegistrationId</B>()</PRE>
-<DL>
-<DD>Gets the canonical registration id, if any.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getErrorCodeName()"><!-- --></A><H3>
-getErrorCodeName</H3>
-<PRE>
-public java.lang.String <B>getErrorCodeName</B>()</PRE>
-<DL>
-<DD>Gets the error code, if any.
-<P>
-<DD><DL>
-</DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="toString()"><!-- --></A><H3>
-toString</H3>
-<PRE>
-public java.lang.String <B>toString</B>()</PRE>
-<DL>
-<DD><DL>
-<DT><B>Overrides:</B><DD><CODE>toString</CODE> in class <CODE>java.lang.Object</CODE></DL>
-</DD>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server"><B>NEXT CLASS</B></A></FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Result.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Result.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
deleted file mode 100644
index fabda98..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
+++ /dev/null
@@ -1,664 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Sender
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Sender";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Sender.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Sender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<!-- ======== START OF CLASS DATA ======== -->
-<H2>
-<FONT SIZE="-1">
-com.google.android.gcm.server</FONT>
-<BR>
-Class Sender</H2>
-<PRE>
-java.lang.Object
- <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>com.google.android.gcm.server.Sender</B>
-</PRE>
-<HR>
-<DL>
-<DT><PRE>public class <B>Sender</B><DT>extends java.lang.Object</DL>
-</PRE>
-
-<P>
-Helper class to send messages to the GCM service using an API Key.
-<P>
-
-<P>
-<HR>
-
-<P>
-<!-- =========== FIELD SUMMARY =========== -->
-
-<A NAME="field_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Field Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#BACKOFF_INITIAL_DELAY">BACKOFF_INITIAL_DELAY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Initial delay before first retry, without jitter.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.util.logging.Logger</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#logger">logger</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;int</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#MAX_BACKOFF_DELAY">MAX_BACKOFF_DELAY</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maximum delay before a retry.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.util.Random</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#random">random</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#UTF8">UTF8</A></B></CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-
-<A NAME="constructor_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Constructor Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#Sender(java.lang.String)">Sender</A></B>(java.lang.String&nbsp;key)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Default constructor.</TD>
-</TR>
-</TABLE>
-&nbsp;
-<!-- ========== METHOD SUMMARY =========== -->
-
-<A NAME="method_summary"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Method Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;void</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#addParameter(java.lang.StringBuilder, java.lang.String, java.lang.String)">addParameter</A></B>(java.lang.StringBuilder&nbsp;body,
- java.lang.String&nbsp;name,
- java.lang.String&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a new parameter to the HTTP POST body.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.net.HttpURLConnection</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#getConnection(java.lang.String)">getConnection</A></B>(java.lang.String&nbsp;url)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets an <CODE>HttpURLConnection</CODE> given an URL.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;java.lang.String</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#getString(java.io.InputStream)">getString</A></B>(java.io.InputStream&nbsp;stream)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convenience method to convert an InputStream to a String.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;java.lang.StringBuilder</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#newBody(java.lang.String, java.lang.String)">newBody</A></B>(java.lang.String&nbsp;name,
- java.lang.String&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>StringBuilder</CODE> to be used as the body of an HTTP POST.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#newKeyValues(java.lang.String, java.lang.String)">newKeyValues</A></B>(java.lang.String&nbsp;key,
- java.lang.String&nbsp;value)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a map with just one key-value pair.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.net.HttpURLConnection</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#post(java.lang.String, java.lang.String)">post</A></B>(java.lang.String&nbsp;url,
- java.lang.String&nbsp;body)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Make an HTTP post to a given URL.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>protected &nbsp;java.net.HttpURLConnection</CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#post(java.lang.String, java.lang.String, java.lang.String)">post</A></B>(java.lang.String&nbsp;url,
- java.lang.String&nbsp;contentType,
- java.lang.String&nbsp;body)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.util.List, int)">send</A></B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.util.List&lt;java.lang.String&gt;&nbsp;regIds,
- int&nbsp;retries)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sends a message to many devices, retrying in case of unavailability.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.lang.String, int)">send</A></B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.lang.String&nbsp;registrationId,
- int&nbsp;retries)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sends a message to one device, retrying in case of unavailability.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#sendNoRetry(com.google.android.gcm.server.Message, java.util.List)">sendNoRetry</A></B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.util.List&lt;java.lang.String&gt;&nbsp;registrationIds)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sends a message without retrying in case of service unavailability.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A></CODE></FONT></TD>
-<TD><CODE><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html#sendNoRetry(com.google.android.gcm.server.Message, java.lang.String)">sendNoRetry</A></B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.lang.String&nbsp;registrationId)</CODE>
-
-<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sends a message without retrying in case of service unavailability.</TD>
-</TR>
-</TABLE>
-&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
-</TR>
-</TABLE>
-&nbsp;
-<P>
-
-<!-- ============ FIELD DETAIL =========== -->
-
-<A NAME="field_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Field Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="UTF8"><!-- --></A><H3>
-UTF8</H3>
-<PRE>
-protected static final java.lang.String <B>UTF8</B></PRE>
-<DL>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Sender.UTF8">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="BACKOFF_INITIAL_DELAY"><!-- --></A><H3>
-BACKOFF_INITIAL_DELAY</H3>
-<PRE>
-protected static final int <B>BACKOFF_INITIAL_DELAY</B></PRE>
-<DL>
-<DD>Initial delay before first retry, without jitter.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Sender.BACKOFF_INITIAL_DELAY">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="MAX_BACKOFF_DELAY"><!-- --></A><H3>
-MAX_BACKOFF_DELAY</H3>
-<PRE>
-protected static final int <B>MAX_BACKOFF_DELAY</B></PRE>
-<DL>
-<DD>Maximum delay before a retry.
-<P>
-<DL>
-<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#com.google.android.gcm.server.Sender.MAX_BACKOFF_DELAY">Constant Field Values</A></DL>
-</DL>
-<HR>
-
-<A NAME="random"><!-- --></A><H3>
-random</H3>
-<PRE>
-protected final java.util.Random <B>random</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-
-<A NAME="logger"><!-- --></A><H3>
-logger</H3>
-<PRE>
-protected final java.util.logging.Logger <B>logger</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-
-<A NAME="constructor_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Constructor Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="Sender(java.lang.String)"><!-- --></A><H3>
-Sender</H3>
-<PRE>
-public <B>Sender</B>(java.lang.String&nbsp;key)</PRE>
-<DL>
-<DD>Default constructor.
-<P>
-<DL>
-<DT><B>Parameters:</B><DD><CODE>key</CODE> - API key obtained through the Google API Console.</DL>
-</DL>
-
-<!-- ============ METHOD DETAIL ========== -->
-
-<A NAME="method_detail"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Method Detail</B></FONT></TH>
-</TR>
-</TABLE>
-
-<A NAME="send(com.google.android.gcm.server.Message, java.lang.String, int)"><!-- --></A><H3>
-send</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A> <B>send</B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.lang.String&nbsp;registrationId,
- int&nbsp;retries)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Sends a message to one device, retrying in case of unavailability.
-
- <p>
- <strong>Note: </strong> this method uses exponential back-off to retry in
- case of service unavailability and hence could block the calling thread
- for many seconds.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>message</CODE> - message to be sent, including the device's registration id.<DD><CODE>registrationId</CODE> - device where the message will be sent.<DD><CODE>retries</CODE> - number of retries in case of service unavailability errors.
-<DT><B>Returns:</B><DD>result of the request (see its javadoc for more details)
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalArgumentException</CODE> - if registrationId is null.
-<DD><CODE><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A></CODE> - if GCM didn't returned a 200 or 503 status.
-<DD><CODE>java.io.IOException</CODE> - if message could not be sent.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="sendNoRetry(com.google.android.gcm.server.Message, java.lang.String)"><!-- --></A><H3>
-sendNoRetry</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A> <B>sendNoRetry</B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.lang.String&nbsp;registrationId)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Sends a message without retrying in case of service unavailability. See
- <A HREF="../../../../../com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.lang.String, int)"><CODE>send(Message, String, int)</CODE></A> for more info.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>result of the post, or null if the GCM service was
- unavailable.
-<DT><B>Throws:</B>
-<DD><CODE><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A></CODE> - if GCM didn't returned a 200 or 503 status.
-<DD><CODE>java.lang.IllegalArgumentException</CODE> - if registrationId is null.
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="send(com.google.android.gcm.server.Message, java.util.List, int)"><!-- --></A><H3>
-send</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A> <B>send</B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.util.List&lt;java.lang.String&gt;&nbsp;regIds,
- int&nbsp;retries)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Sends a message to many devices, retrying in case of unavailability.
-
- <p>
- <strong>Note: </strong> this method uses exponential back-off to retry in
- case of service unavailability and hence could block the calling thread
- for many seconds.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>message</CODE> - message to be sent.<DD><CODE>regIds</CODE> - registration id of the devices that will receive
- the message.<DD><CODE>retries</CODE> - number of retries in case of service unavailability errors.
-<DT><B>Returns:</B><DD>combined result of all requests made.
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalArgumentException</CODE> - if registrationIds is null or
- empty.
-<DD><CODE><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A></CODE> - if GCM didn't returned a 200 or 503 status.
-<DD><CODE>java.io.IOException</CODE> - if message could not be sent.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="sendNoRetry(com.google.android.gcm.server.Message, java.util.List)"><!-- --></A><H3>
-sendNoRetry</H3>
-<PRE>
-public <A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A> <B>sendNoRetry</B>(<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>&nbsp;message,
- java.util.List&lt;java.lang.String&gt;&nbsp;registrationIds)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Sends a message without retrying in case of service unavailability. See
- <A HREF="../../../../../com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.util.List, int)"><CODE>send(Message, List, int)</CODE></A> for more info.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>true if the message was sent successfully,
- false if it failed but could be retried.
-<DT><B>Throws:</B>
-<DD><CODE>java.lang.IllegalArgumentException</CODE> - if registrationIds is null or
- empty.
-<DD><CODE><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A></CODE> - if GCM didn't returned a 200 status.
-<DD><CODE>java.io.IOException</CODE> - if message could not be sent or received.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="post(java.lang.String, java.lang.String)"><!-- --></A><H3>
-post</H3>
-<PRE>
-protected java.net.HttpURLConnection <B>post</B>(java.lang.String&nbsp;url,
- java.lang.String&nbsp;body)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Make an HTTP post to a given URL.
-<P>
-<DD><DL>
-
-<DT><B>Returns:</B><DD>HTTP response.
-<DT><B>Throws:</B>
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="post(java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
-post</H3>
-<PRE>
-protected java.net.HttpURLConnection <B>post</B>(java.lang.String&nbsp;url,
- java.lang.String&nbsp;contentType,
- java.lang.String&nbsp;body)
- throws java.io.IOException</PRE>
-<DL>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newKeyValues(java.lang.String, java.lang.String)"><!-- --></A><H3>
-newKeyValues</H3>
-<PRE>
-protected static final java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>newKeyValues</B>(java.lang.String&nbsp;key,
- java.lang.String&nbsp;value)</PRE>
-<DL>
-<DD>Creates a map with just one key-value pair.
-<P>
-<DD><DL>
-</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="newBody(java.lang.String, java.lang.String)"><!-- --></A><H3>
-newBody</H3>
-<PRE>
-protected static java.lang.StringBuilder <B>newBody</B>(java.lang.String&nbsp;name,
- java.lang.String&nbsp;value)</PRE>
-<DL>
-<DD>Creates a <CODE>StringBuilder</CODE> to be used as the body of an HTTP POST.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>name</CODE> - initial parameter for the POST.<DD><CODE>value</CODE> - initial value for that parameter.
-<DT><B>Returns:</B><DD>StringBuilder to be used an HTTP POST body.</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="addParameter(java.lang.StringBuilder, java.lang.String, java.lang.String)"><!-- --></A><H3>
-addParameter</H3>
-<PRE>
-protected static void <B>addParameter</B>(java.lang.StringBuilder&nbsp;body,
- java.lang.String&nbsp;name,
- java.lang.String&nbsp;value)</PRE>
-<DL>
-<DD>Adds a new parameter to the HTTP POST body.
-<P>
-<DD><DL>
-<DT><B>Parameters:</B><DD><CODE>body</CODE> - HTTP POST body<DD><CODE>name</CODE> - parameter's name<DD><CODE>value</CODE> - parameter's value</DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getConnection(java.lang.String)"><!-- --></A><H3>
-getConnection</H3>
-<PRE>
-protected java.net.HttpURLConnection <B>getConnection</B>(java.lang.String&nbsp;url)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Gets an <CODE>HttpURLConnection</CODE> given an URL.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<HR>
-
-<A NAME="getString(java.io.InputStream)"><!-- --></A><H3>
-getString</H3>
-<PRE>
-protected static java.lang.String <B>getString</B>(java.io.InputStream&nbsp;stream)
- throws java.io.IOException</PRE>
-<DL>
-<DD>Convenience method to convert an InputStream to a String.
-
- <p>
- If the stream ends in a newline character, it will be stripped.
- <p>
- If the stream is null, returns an empty string.
-<P>
-<DD><DL>
-
-<DT><B>Throws:</B>
-<DD><CODE>java.io.IOException</CODE></DL>
-</DD>
-</DL>
-<!-- ========= END OF CLASS DATA ========= -->
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>PREV CLASS</B></A>&nbsp;
-&nbsp;NEXT CLASS</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/Sender.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="Sender.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-<TR>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
-<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
deleted file mode 100644
index 1bc4fd9..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-frame.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-com.google.android.gcm.server
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-
-</HEAD>
-
-<BODY BGCOLOR="white">
-<FONT size="+1" CLASS="FrameTitleFont">
-<A HREF="../../../../../com/google/android/gcm/server/package-summary.html" target="classFrame">com.google.android.gcm.server</A></FONT>
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Classes</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="Constants.html" title="class in com.google.android.gcm.server" target="classFrame">Constants</A>
-<BR>
-<A HREF="Message.html" title="class in com.google.android.gcm.server" target="classFrame">Message</A>
-<BR>
-<A HREF="Message.Builder.html" title="class in com.google.android.gcm.server" target="classFrame">Message.Builder</A>
-<BR>
-<A HREF="MulticastResult.html" title="class in com.google.android.gcm.server" target="classFrame">MulticastResult</A>
-<BR>
-<A HREF="Result.html" title="class in com.google.android.gcm.server" target="classFrame">Result</A>
-<BR>
-<A HREF="Sender.html" title="class in com.google.android.gcm.server" target="classFrame">Sender</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
-<TR>
-<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
-Exceptions</FONT>&nbsp;
-<FONT CLASS="FrameItemFont">
-<BR>
-<A HREF="InvalidRequestException.html" title="class in com.google.android.gcm.server" target="classFrame">InvalidRequestException</A></FONT></TD>
-</TR>
-</TABLE>
-
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
deleted file mode 100644
index de791c7..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-com.google.android.gcm.server
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="com.google.android.gcm.server";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<H2>
-Package com.google.android.gcm.server
-</H2>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A></B></TD>
-<TD>Constants used on GCM service communication.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A></B></TD>
-<TD>GCM message.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A></B></TD>
-<TD>&nbsp;</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A></B></TD>
-<TD>Result of a GCM multicast message request .</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A></B></TD>
-<TD>Result of a GCM message request that returned HTTP status code 200.</TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A></B></TD>
-<TD>Helper class to send messages to the GCM service using an API Key.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Exception Summary</B></FONT></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD WIDTH="15%"><B><A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A></B></TD>
-<TD>Exception thrown when GCM returned an error due to an invalid request.</TD>
-</TR>
-</TABLE>
-&nbsp;
-
-<P>
-<DL>
-</DL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV PACKAGE&nbsp;
-&nbsp;NEXT PACKAGE</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/package-summary.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html b/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
deleted file mode 100644
index d509312..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-com.google.android.gcm.server Class Hierarchy
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="com.google.android.gcm.server Class Hierarchy";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For Package com.google.android.gcm.server
-</H2>
-</CENTER>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.Object<UL>
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server"><B>Constants</B></A><LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>Message</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>Message.Builder</B></A><LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>MulticastResult</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>Result</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server"><B>Sender</B></A><LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">java.lang.Exception<UL>
-<LI TYPE="circle">java.io.IOException<UL>
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="../../../../../com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>InvalidRequestException</B></A></UL>
-</UL>
-</UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="../../../../../index.html?com/google/android/gcm/server/package-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/constant-values.html b/docs/html/guide/google/gcm/server-javadoc/constant-values.html
deleted file mode 100644
index 68db1cb..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/constant-values.html
+++ /dev/null
@@ -1,368 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Constant Field Values
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Constant Field Values";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-Constant Field Values</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-<LI><A HREF="#com.google">com.google.*</A>
-</UL>
-
-<A NAME="com.google"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left"><FONT SIZE="+2">
-com.google.*</FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_DEVICE_QUOTA_EXCEEDED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_DEVICE_QUOTA_EXCEEDED">ERROR_DEVICE_QUOTA_EXCEEDED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"DeviceQuotaExceeded"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_INTERNAL_SERVER_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_INTERNAL_SERVER_ERROR">ERROR_INTERNAL_SERVER_ERROR</A></CODE></TD>
-<TD ALIGN="right"><CODE>"InternalServerError"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_INVALID_REGISTRATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_INVALID_REGISTRATION">ERROR_INVALID_REGISTRATION</A></CODE></TD>
-<TD ALIGN="right"><CODE>"InvalidRegistration"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_INVALID_TTL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_INVALID_TTL">ERROR_INVALID_TTL</A></CODE></TD>
-<TD ALIGN="right"><CODE>"InvalidTtl"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_MESSAGE_TOO_BIG"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_MESSAGE_TOO_BIG">ERROR_MESSAGE_TOO_BIG</A></CODE></TD>
-<TD ALIGN="right"><CODE>"MessageTooBig"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_MISMATCH_SENDER_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_MISMATCH_SENDER_ID">ERROR_MISMATCH_SENDER_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"MismatchSenderId"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_MISSING_COLLAPSE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_MISSING_COLLAPSE_KEY">ERROR_MISSING_COLLAPSE_KEY</A></CODE></TD>
-<TD ALIGN="right"><CODE>"MissingCollapseKey"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_MISSING_REGISTRATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_MISSING_REGISTRATION">ERROR_MISSING_REGISTRATION</A></CODE></TD>
-<TD ALIGN="right"><CODE>"MissingRegistration"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_NOT_REGISTERED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_NOT_REGISTERED">ERROR_NOT_REGISTERED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"NotRegistered"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_QUOTA_EXCEEDED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_QUOTA_EXCEEDED">ERROR_QUOTA_EXCEEDED</A></CODE></TD>
-<TD ALIGN="right"><CODE>"QuotaExceeded"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.ERROR_UNAVAILABLE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#ERROR_UNAVAILABLE">ERROR_UNAVAILABLE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"Unavailable"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.GCM_SEND_ENDPOINT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#GCM_SEND_ENDPOINT">GCM_SEND_ENDPOINT</A></CODE></TD>
-<TD ALIGN="right"><CODE>"https://android.googleapis.com/gcm/send"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_CANONICAL_IDS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_CANONICAL_IDS">JSON_CANONICAL_IDS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"canonical_ids"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_ERROR">JSON_ERROR</A></CODE></TD>
-<TD ALIGN="right"><CODE>"error"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_FAILURE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_FAILURE">JSON_FAILURE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"failure"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_MESSAGE_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_MESSAGE_ID">JSON_MESSAGE_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"message_id"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_MULTICAST_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_MULTICAST_ID">JSON_MULTICAST_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"multicast_id"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_PAYLOAD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_PAYLOAD">JSON_PAYLOAD</A></CODE></TD>
-<TD ALIGN="right"><CODE>"data"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_REGISTRATION_IDS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_REGISTRATION_IDS">JSON_REGISTRATION_IDS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"registration_ids"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_RESULTS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_RESULTS">JSON_RESULTS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"results"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.JSON_SUCCESS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#JSON_SUCCESS">JSON_SUCCESS</A></CODE></TD>
-<TD ALIGN="right"><CODE>"success"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.PARAM_COLLAPSE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#PARAM_COLLAPSE_KEY">PARAM_COLLAPSE_KEY</A></CODE></TD>
-<TD ALIGN="right"><CODE>"collapse_key"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.PARAM_DELAY_WHILE_IDLE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#PARAM_DELAY_WHILE_IDLE">PARAM_DELAY_WHILE_IDLE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"delay_while_idle"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.PARAM_PAYLOAD_PREFIX"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#PARAM_PAYLOAD_PREFIX">PARAM_PAYLOAD_PREFIX</A></CODE></TD>
-<TD ALIGN="right"><CODE>"data."</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.PARAM_REGISTRATION_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#PARAM_REGISTRATION_ID">PARAM_REGISTRATION_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"registration_id"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.PARAM_TIME_TO_LIVE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#PARAM_TIME_TO_LIVE">PARAM_TIME_TO_LIVE</A></CODE></TD>
-<TD ALIGN="right"><CODE>"time_to_live"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.TOKEN_CANONICAL_REG_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#TOKEN_CANONICAL_REG_ID">TOKEN_CANONICAL_REG_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"registration_id"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.TOKEN_ERROR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#TOKEN_ERROR">TOKEN_ERROR</A></CODE></TD>
-<TD ALIGN="right"><CODE>"Error"</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Constants.TOKEN_MESSAGE_ID"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Constants.html#TOKEN_MESSAGE_ID">TOKEN_MESSAGE_ID</A></CODE></TD>
-<TD ALIGN="right"><CODE>"id"</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-
-<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="3">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A></TH>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Sender.BACKOFF_INITIAL_DELAY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>protected&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Sender.html#BACKOFF_INITIAL_DELAY">BACKOFF_INITIAL_DELAY</A></CODE></TD>
-<TD ALIGN="right"><CODE>1000</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Sender.MAX_BACKOFF_DELAY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>protected&nbsp;static&nbsp;final&nbsp;int</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Sender.html#MAX_BACKOFF_DELAY">MAX_BACKOFF_DELAY</A></CODE></TD>
-<TD ALIGN="right"><CODE>1024000</CODE></TD>
-</TR>
-<TR BGCOLOR="white" CLASS="TableRowColor">
-<A NAME="com.google.android.gcm.server.Sender.UTF8"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
-<CODE>protected&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
-<TD ALIGN="left"><CODE><A HREF="com/google/android/gcm/server/Sender.html#UTF8">UTF8</A></CODE></TD>
-<TD ALIGN="right"><CODE>"UTF-8"</CODE></TD>
-</TR>
-</FONT></TD>
-</TR>
-</TABLE>
-
-<P>
-
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/default.css b/docs/html/guide/google/gcm/server-javadoc/default.css
deleted file mode 100644
index 7c395c7..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/default.css
+++ /dev/null
@@ -1,4160 +0,0 @@
-/* color definitions */
-/* 16 column layout */
-/* clearfix idiom */
-/* common mixins */
-/* page layout + top-level styles */
-::-webkit-selection,
-::-moz-selection,
-::selection {
- background-color: #0099cc;
- color: #fff; }
-
-html, body {
- height: 100%;
- margin: 0;
- padding: 0;
- background-color:#F9F9F9;
- -webkit-font-smoothing: antialiased;
- /* prevent subpixel antialiasing, which thickens the text */
- /* text-rendering: optimizeLegibility; */
- /* turned off ligatures due to bug 5945455 */ }
-
-body {
- color: #222;
- font: 14px/19px Roboto, sans-serif;
- font-weight: 400;
- letter-spacing:.1;
- padding:0 10px; }
-
-#page-container {
- width: 940px;
- margin: 0 40px; }
-
-#page-header {
- height: 80px;
- margin-bottom: 20px;
- font-size: 48px;
- line-height: 48px;
- font-weight: 100;
- padding-left: 10px; }
- #page-header a {
- display: block;
- position: relative;
- top: 20px;
- text-decoration: none;
- color: #555555 !important; }
-
-#main-row {
- display: inline-block; }
- #main-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- * html #main-row {
- height: 1px; }
-
-#page-footer {
- margin-left: 190px;
- margin-top: 80px;
- color: #999999;
- padding-bottom: 40px;
- font-size: 12px;
- line-height: 15px; }
- #page-footer a {
- color: #777777; }
- #page-footer #copyright {
- margin-bottom: 10px; }
-
-#nav-container {
- width: 160px;
- min-height: 10px;
- margin-right: 20px;
- float: left; }
-
-#nav {
- margin:0;
- padding:0 0 30px;
-}
-
-#side-nav {
- min-height:5px; /* silly way to avoid doc floating left when nav goes fixed */
- margin-bottom:1px;
-}
-#devdoc-nav {
- outline:none;
- width:auto;
- margin: 20px 0 0; }
-
-#devdoc-nav h2 {
- border:0;
-}
-
-#devdoc-nav.fixed {
- position: fixed;
- margin:0;
- top: 20px; }
-
-#content {
- width: 760px;
- float: left; }
-
-a:hover,
-acronym:hover {
- color: #7aa1b0 !important; }
-
-a:focus,
-a:active {
- color: #33b5e5 !important; }
-
-img {
- border: none; }
-#jd-content img {
- margin-bottom:15px;
-}
-
-ul {
- margin: 0;
- padding: 0; }
-
-strong {
- font-weight: 500; }
-
-em {
- font-style: italic; }
-
-acronym {
- border-bottom: 1px dotted #555555;
- cursor: help; }
-
-acronym:hover {
- border-bottom-color: #7aa1b0; }
-
-img.with-shadow,
-video.with-shadow {
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25); }
-
-/* disclosures mixin */
-/* content layout */
-.layout-content-row {
- display: inline-block;
- margin-bottom: 10px; }
- .layout-content-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
- * html .layout-content-row {
- height: 1px; }
-
-.layout-content-col {
- float: left;
- margin-left: 20px; }
- .layout-content-col:first-child {
- margin-left: 0; }
- .layout-content-col h3,
- .layout-content-col h4 {
- margin-top:0; }
-
-.layout-content-col.span-1 {
- width: 40px; }
-
-.layout-content-col.span-2 {
- width: 100px; }
-
-.layout-content-col.span-3 {
- width: 160px; }
-
-.layout-content-col.span-4 {
- width: 220px; }
-
-.layout-content-col.span-5 {
- width: 280px; }
-
-.layout-content-col.span-6 {
- width: 340px; }
-
-.layout-content-col.span-7 {
- width: 400px; }
-
-.layout-content-col.span-8 {
- width: 460px; }
-
-.layout-content-col.span-9 {
- width: 520px; }
-
-.layout-content-col.span-10 {
- width: 580px; }
-
-.layout-content-col.span-11 {
- width: 640px; }
-
-.layout-content-col.span-12 {
- width: 700px; }
-
-.layout-content-col.span-13 {
- width: 760px; }
-
-.vspace.size-1 {
- height: 10px; }
-
-.vspace.size-2 {
- height: 20px; }
-
-.vspace.size-3 {
- height: 30px; }
-
-.vspace.size-4 {
- height: 40px; }
-
-.vspace.size-5 {
- height: 50px; }
-
-.vspace.size-6 {
- height: 60px; }
-
-.vspace.size-7 {
- height: 70px; }
-
-.vspace.size-8 {
- height: 80px; }
-
-.vspace.size-9 {
- height: 90px; }
-
-.vspace.size-10 {
- height: 100px; }
-
-.vspace.size-11 {
- height: 110px; }
-
-.vspace.size-12 {
- height: 120px; }
-
-.vspace.size-13 {
- height: 130px; }
-
-.vspace.size-14 {
- height: 140px; }
-
-.vspace.size-15 {
- height: 150px; }
-
-.vspace.size-16 {
- height: 160px; }
-
-/* nav */
-#nav {
- /* section header divs */
- /* expanded section header divs */
- /* sublinks */ }
- #nav li {
- list-style-type: none;
- font-size: 14px;
- margin:0;
- padding:0;
- line-height: 15px; }
- #nav a {
- color: #555555;
- text-decoration: none; }
- #nav .nav-section-header {
- position: relative;
- margin-bottom: 1px;
- padding: 0 30px 0 0; }
- #nav li.selected a, #nav li.selected > .nav-section-header > a {
- color: #09C;
- }
- #nav li.selected ul li a {
- /* don't highlight child items */
- color: #555555; }
- #nav .nav-section .nav-section .nav-section-header {
- /* no white line between second level sections */
- margin-bottom: 0; }
- /* section header links */
- #nav > li > div > a {
- display: block;
- color: #333333;
- font-weight: 500;
- padding: 10px 0 10px 10px; }
- #nav .nav-section-header:after {
- content: '';
- background: transparent url(../images/styles/disclosure_down.png) no-repeat scroll 50% 50%;
- width: 34px;
- height: 34px;
- display: block;
- position: absolute;
- top: 0;
- right: 0; }
- #nav .nav-section-header.empty:after {
- display: none; }
- /* nested nav headers */
- #nav .nav-section .nav-section {
- position: relative;
- padding: 0;
- margin: 0; }
- #nav .nav-section li a {
- /* first gen child (2nd level li) */
- display:block;
- font-weight: normal;
- text-transform: none;
- padding: 7px 5px 7px 10px;
- }
- #nav .nav-section li li a {
- /* second gen child (3rd level li) */
- padding: 5px 5px 5px 10px;
- }
- #nav li.expanded .nav-section-header {
- background:#e9e9e9;
- background: rgba(0, 0, 0, 0.05); }
- #nav li.expanded li .nav-section-header {
- background: transparent; }
- #nav li.expanded li ul {
- /* 3rd level ul */
- padding:0 10px;
- }
- #nav li.expanded > .nav-section-header:after {
- content: '';
- background: transparent url(../images/styles/disclosure_up.png) no-repeat scroll 50% 50%;
- width: 34px;
- height: 34px; }
- #nav li ul {
- display:none;
- overflow: hidden;
- margin: 0; }
- #nav li ul.animate-height-in {
- -webkit-transition: height 0.25s ease-in;
- -moz-transition: height 0.25s ease-in;
- transition: height 0.25s ease-in; }
- #nav li ul.animate-height-out {
- -webkit-transition: height 0.25s ease-out;
- -moz-transition: height 0.25s ease-out;
- transition: height 0.25s ease-out; }
- #nav li ul li {
- padding: 0; }
- #nav li li li {
- padding: 0; }
- #nav li.expanded ul {
- }
- #nav li ul > li {
- padding:0;
- }
- #nav li ul > li:last-child {
- padding-bottom:5px;
- }
- #nav li.expanded ul > li {
- background:#efefef;
- background: rgba(0, 0, 0, 0.03); }
- #nav li.expanded ul > li li {
- background:inherit; }
-
-.new,
-.new-child {
- font-size: .78em;
- font-weight: bold;
- color: #ff3d3d;
- vertical-align:top;
- white-space:nowrap;
-}
-
-/* content header */
-.content-header {
- height: 30px;
- margin:20px 0 25px;
- padding:0 0 10px;}
-.content-header.just-links {
- margin-bottom:0;
- padding-bottom:0;}
-
-.content-header h1 {
- color:#000;
- margin:0;
- border-bottom:0;
- padding:0;
-}
-
-.content-footer {
- border-top: 1px solid #ccc;
- margin-top: 10px;
- padding-top:10px;
- height: 30px; }
-
-.content-footer .col-9 {
- margin-left:0;
-}
-.content-footer .col-4 {
- margin-right:0;
-}
-.content-footer.wrap {
- width:940px;
-}
-
-.paging-links {
- position: relative; }
- .paging-links a {
- position: absolute; }
- .paging-links a,
- .training-nav-top a {
- font-size: 14px;
- line-height: 30px;
- color: #555555;
- text-decoration: none;
- text-transform: uppercase; }
- .paging-links .prev-page-link,
- .training-nav-top .prev-page-link {
- left: -5px; }
- .paging-links .prev-page-link:before,
- .training-nav-top .prev-page-link:before {
- content: '';
- background: transparent url(../images/styles/disclosure_left.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-right: 5px; }
- .paging-links .next-page-link,
- .training-nav-top .next-page-link,
- .training-nav-top .start-class-link,
- .training-nav-top .start-course-link {
- right: 10px; }
- .next-page-link:after,
- .start-class-link:after,
- .start-course-link:after,
- .next-class-link:after {
- content: '';
- background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-left: 5px; }
-
-
- .training-nav-top a {
- display:block;
- float:left;
- width:108px;
- height:28px;
- padding: 8px 15px;
- line-height:28px;
- text-align:center;
- border:1px solid #DADADA;
- border-bottom:0;
- }
-
- .training-nav-top a.next-page-link {
- border-left:0;
- width:109px;
- }
-
- .training-nav-top a.disabled,
- .content-footer a.disabled {
- color:#999;
- }
-
- .training-nav-top a.disabled:hover,
- .content-footer a.disabled:hover {
- cursor:default;
- color:#999 !important;
- }
-
- .training-nav-top a.start-class-link,
- .training-nav-top a.start-course-link {
- width:248px;
- }
-
- .hide {
- display:none !important;
- }
-
- .content-footer.next-class {
- display:block;
- border:0;
- margin-top:0;
- padding-top:0;
- }
-
- .content-footer.next-class a.next-class-link {
- display:block;
- float:right;
- text-transform:uppercase;
- }
-
-/* content body */
-@-webkit-keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-@-moz-keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-@keyframes glowheader {
- from {
- background-color: #33b5e5;
- color: #000;
- border-bottom-color: #000; }
-
- to {
- background-color: transparent;
- color: #33b5e5;
- border-bottom-color: #33b5e5; } }
-
-h2:target,
-h3:target {
- -webkit-animation-name: glowheader;
- -moz-animation-name: glowheader;
- animation-name: glowheader;
- -webkit-animation-duration: 0.7s;
- -moz-animation-duration: 0.7s;
- animation-duration: 0.7s;
- -webkit-animation-timing-function: ease-out;
- -moz-animation-timing-function: ease-out;
- animation-timing-function: ease-out; }
-
-.design ol h4 {
- margin-bottom:0;
-}
-.design ol {
- counter-reset: item; }
- .design ol>li {
- font-size: 14px;
- line-height: 20px;
- list-style-type: none;
- position: relative; }
- .design ol>li:before {
- content: counter(item) ". ";
- counter-increment: item;
- position: absolute;
- left: -20px;
- top: 0; }
- .design ol li.value-1:before {
- content: "1. "; }
- .design ol li.value-2:before {
- content: "2. "; }
- .design ol li.value-3:before {
- content: "3. "; }
- .design ol li.value-4:before {
- content: "4. "; }
- .design ol li.value-5:before {
- content: "5. "; }
- .design ol li.value-6:before {
- content: "6. "; }
- .design ol li.value-7:before {
- content: "7. "; }
- .design ol li.value-8:before {
- content: "8. "; }
- .design ol li.value-9:before {
- content: "9. "; }
- .design ol li.value-10:before {
- content: "10. "; }
-.design .with-callouts ol>li {
- list-style-position: inside;
- margin-left: 0; }
- .design .with-callouts ol>li:before {
- display: inline;
- left: -20px;
- float: left;
- width: 17px;
- color: #33b5e5;
- font-weight: 500; }
-.design .with-callouts ul>li {
- list-style-position: outside; }
-
-/* special list items */
-li.no-bullet {
- list-style-type: none !important; }
-li.no-bullet *{
- margin:0; }
-
-.design li.with-icon {
- position: relative;
- margin-left: 20px;
- min-height: 30px; }
- .design li.with-icon p {
- margin-left: 0 !important; }
- .design li.with-icon:before {
- position: absolute;
- left: -40px;
- top: 0;
- content: '';
- width: 30px;
- height: 30px; }
- .design li.with-icon.tablet:before {
- background-image: url(../images/styles/ico_phone_tablet.png); }
- .design li.with-icon.web:before {
- background-image: url(../images/styles/ico_web.png); }
- .design li.with-icon.action:before {
- background-image: url(../images/styles/ico_action.png); }
- .design li.with-icon.use:before {
- background-image: url(../images/styles/ico_use.png); }
-
-/* figures and callouts */
-.figure {
- position: relative; }
- .figure.pad-below {
- margin-bottom: 20px; }
- .figure .figure-callout {
- position: absolute;
- color: #fff;
- font-weight: 500;
- font-size: 16px;
- line-height: 23px;
- text-align: center;
- background: transparent url(../images/styles/callout.png) no-repeat scroll 50% 50%;
- padding-right: 2px;
- width: 30px;
- height: 29px;
- z-index: 1000; }
- .figure .figure-callout.top {
- top: -9px; }
- .figure .figure-callout.right {
- right: -5px; }
-
-.figure-caption {
- margin: 0 10px 20px 0;
- font-size: 14px;
- line-height: 20px;
- font-style: italic; }
-
-/* rows of figures */
-.figure-row {
- font-size: 0;
- line-height: 0;
- /* to prevent space between figures */ }
- .figure-row .figure {
- display: inline-block;
- vertical-align: top; }
- .figure-row .figure + .figure {
- margin-left: 10px;
- /* reintroduce space between figures */ }
-
-/* video containers */
-.framed-galaxynexus-land-span-13 {
- background: transparent url(../images/styles/device_galaxynexus_blank_land_span13.png) no-repeat
-scroll top left;
- padding: 42px 122px 62px 126px;
- overflow: hidden; }
- .framed-galaxynexus-land-span-13, .framed-galaxynexus-land-span-13 video,
-.framed-galaxynexus-land-span-13 img {
- width: 512px;
- height: 286px; }
-
-.framed-galaxynexus-port-span-9 {
- background: transparent url(../images/styles/device_galaxynexus_blank_port_span9.png) no-repeat
-scroll top left;
- padding: 95px 122px 107px 124px;
- overflow: hidden; }
- .framed-galaxynexus-port-span-9, .framed-galaxynexus-port-span-9 video,
-.framed-galaxynexus-port-span-9 img {
- width: 274px;
- height: 488px; }
-
-.framed-galaxynexus-port-span-5 {
- background: transparent url(../images/styles/device_galaxynexus_blank_port_span5.png) no-repeat
-scroll top left;
- padding: 75px 31px 76px 33px;
- overflow: hidden; }
- .framed-galaxynexus-port-span-5, .framed-galaxynexus-port-span-5 video,
-.framed-galaxynexus-port-span-5 img {
- width: 216px;
- height: 384px; }
-
-/* landing page disclosures */
-.landing-page-link {
- text-decoration: none;
- font-weight: 500;
- color: #333333; }
- .landing-page-link:after {
- content: '';
- background: transparent url(../images/styles/disclosure_right.png) no-repeat scroll 50% 50%;
- width: 10px;
- height: 10px;
- display: inline-block;
- margin-left: 5px; }
-
-/* tooltips */
-.tooltip-box {
- position: absolute;
- background-color: rgba(0, 0, 0, 0.9);
- border-radius: 2px;
- font-size: 14px;
- line-height: 20px;
- color: #fff;
- padding: 6px 10px;
- max-width: 250px;
- z-index: 10000; }
- .tooltip-box.below:after {
- position: absolute;
- content: '';
- line-height: 0;
- display: block;
- top: -10px;
- left: 5px;
- border: 5px solid transparent;
- border-bottom-color: rgba(0, 0, 0, 0.9); }
-
-/* video note */
-.video-instructions {
- margin-top: 10px;
- margin-bottom: 10px; }
- .video-instructions:before {
- content: '';
- background: transparent url(../images/styles/ico_movie_inline.png) no-repeat scroll top left;
- display: inline-block;
- width: 12px;
- height: 12px;
- margin-right: 8px; }
- .video-instructions:after {
- content: 'Click device screen to replay movie.'; }
-
-/* download buttons */
-.download-button {
- display: block;
- margin-bottom: 5px;
- text-decoration: none;
- background-color: #33b5e5;
- color: #fff !important;
- font-weight: 500;
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);
- padding: 6px 12px;
- border-radius: 2px; }
- .download-button:hover, .download-button:focus {
- background-color: #0099cc;
- color: #fff !important; }
- .download-button:active {
- background-color: #006699; }
-
-/* UI tables and other things found in Writing style and Settings pattern */
-.ui-table {
- width: 100%;
- background-color: #282828;
- color: #fff;
- border-radius: 2px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
- border-collapse: separate; }
- .ui-table th,
- .ui-table td {
- padding: 5px 10px;
- background-color: inherit;
- border:0;}
- .ui-table thead th {
- font-weight: bold; }
- .ui-table tfoot td {
- border-top: 1px solid #494949;
- border-right: 1px solid #494949;
- text-align: center; }
- .ui-table tfoot td:last-child {
- border-right: 0; }
-
-.layout-with-list-item-margins {
- margin-left: 30px !important; }
-
-.emulate-content-left-padding {
- margin-left: 10px; }
-
-.do-dont-label {
- margin-bottom: 10px;
- padding-left: 20px;
- background: transparent none no-repeat scroll 0px 3px; }
- .do-dont-label.bad {
- background-image: url(../images/styles/ico_wrong.png); }
- .do-dont-label.good {
- background-image: url(../images/styles/ico_good.png); }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***** PREVIOUSLY style.css ******************/
-
-
-
-
-
-@media screen, projection, print {
-[dir='rtl'] {
- direction: rtl;
-}
-html {
- line-height: 20px;
-}
-pre, table, input, textarea, code {
- font-size: 1em;
-}
-address, abbr, cite {
- font-style: normal;
-}
-[dir='rtl'] th {
- text-align: right;
-}
-html[lang^=ja] blockquote, html[lang^=ja] q, html[lang^=ko] blockquote, html[lang^=ko] q,
-html[lang^=zh] blockquote, html[lang^=zh] q {
- font-style: normal;
-}
-q {
- font-style: italic;
-}
-fieldset, iframe, img {
- border: 0;
-}
-img {
- -ms-interpolation-mode: bicubic;
- vertical-align: middle;
- max-width: 100%;
-}
-q {
- quotes: none;
-}
-sup, sub {
- font-size: 11px;
- line-height: 0;
-}
-}
-
-@media screen, projection {
-
-table, fieldset {
- margin: 0;
-}
-h1 {
- color:#333;
- font-size: 22px;
- margin: 20px 0 20px;
- padding:0 0 10px;
-}
-h1, h2 {
- line-height: 32px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.super {
- font-size: 37px;
-}
-h2 {
- color:#333;
- font-size: 20px;
- margin: 20px 0 20px;
- padding:0;
-}
-h3 {
- color:#333;
- font-size: 18px;
-}
-h3, h4 {
- color:#333;
- line-height: 20px;
- margin: 10px 0;
-}
-h4 {
- font-size: 16px;
-}
-h5 {
- font-size: 14px;
-}
-h5, h6 {
- margin: 5px 0;
-}
-h6 {
- font-size: 12px;
-}
-hr { /* applied to the bottom of h2 elements */
- height: 1px;
- margin: 5px 0 20px;
- border: 0;
- background: #ccc;
-}
-p, pre, table, form {
- margin: 0 0 15px;
-}
-small {
- font-size: 11.5px;
- color: #000;
-}
-ul, ol {
- margin: 0 0 15px 18px;
- padding: 0;
-}
-[dir='rtl'] ul, [dir='rtl'] ol {
- margin: 10px 30px 10px 10px;
-}
-ul ul, ul ol, ol ul, ol ol {
- margin-bottom: 0;
- margin-top: 0;
-}
-li {
- margin:0 0 4px;
-}
-dd {
- margin:0 0 10px 30px;
-}
-dd p {
- margin:10px 0 0;
-}
-ul p,
-ol p {
- margin:10px 0 0;
-}
-pre strong, pre b, a strong, a b, a code {
- color: inherit;
-}
-pre, code {
- color: #060;
- font: 14px/1.5 'courier new', courier, monospace;
-}
-code {
- font-weight:bold;
-}
-
-legend {
- display: none;
-}
-a:link, a:visited {
- color: #258aaf;
- text-decoration: none;
-}
-a:focus, a:hover, a:active {
- color: #33B5E5;
- text-decoration: none;
-}
-strong, b {
- font-weight:bold;
- color: #222;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
- border:0;
- margin: .5em 1em 1em 0;
- width:100%; /* consistent table widths; within IE's quirks */
- background-color:#f7f7f7;
-}
-th, td {
- padding: 4px 12px;
- vertical-align: top;
- text-align: left;
-}
-td {
- background-color:inherit;
- border:solid 1px #DDD;
-}
-th {
- background-color: #999;
- color: #fff;
- border:solid 1px #DDD;
- font-weight: normal;
-}
-tr:first-of-type th:first-of-type:empty {
- visibility: hidden;
-}
-/* --------------------------------------------------------------------------
-Footer
-*/
-.line {
- clear: both;
- background: #acbc00;
- background: -moz-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #acbc00),
-color-stop(50%, #acbc00), color-stop(50%, #bdde00), color-stop(100%, #bdde00));
- background: -webkit-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -o-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: -ms-linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- background: linear-gradient(top, #acbc00 0, #acbc00 50%, #bdde00 50%, #bdde00 100%);
- height: 2px;
- margin-top: 150px;
- position: relative;
- z-index: 11;
-}
-#footer {
- font-size:11px;
- clear: both;
- color: #999;
- padding: 15px 0;
- margin-top:10px;
- width:auto;
-}
-#footer-local ul {
- list-style: none;
- margin: 5px 0 30px 0;
-}
-#footer-local li {
- display: inline;
-}
-#footer-local li+li:before {
- content: '|';
- padding: 0 3px;
- color: #e5e5e5;
-}
-#footer-global {
- padding: 10px 15px;
- background: #f5f5f5;
-}
-#footer-global {
- border-top: 1px solid #ebebeb;
- font-size: 11.5px;
- line-height: 1.8;
- list-style: none;
-}
-#footer-global ul {
- margin: 0;
-}
-#footer-global li {
- display: inline;
- font-weight: bold;
-}
-#footer-global li+li:before {
- content: '¬?';
- padding: 0 3px;
-}
-* html #footer-global li {
- margin: 0 13px 0 0;
-}
-* [dir='rtl'] #footer-global li {
- margin: 0 0 0 13px;
-}
-*+html #footer-global li {
- margin: 0 13px 0 0;
-}
-*+[dir='rtl'] #footer-global li {
- margin: 0 0 0 13px;
-}
-#footer-global li a {
- font-weight: normal;
-}
-.locales {
- margin: 10px 0 0 0px;
-}
-[dir='rtl'] .locales {
- background-position: right center;
- float: left;
- padding: 0 24px 0 0;
-}
-.locales form {
- margin: 0;
-}
-.locales select, .sites select {
- line-height: 3.08;
- margin: 0px 0;
- border: solid 1px #EBEBEB;
- -webkit-appearance: none;
- background: white url('../images/arrows-up-down.png') right center no-repeat;
- height: 30px;
- color: #222;
- line-height: normal;
- padding: 5px;
- width: 230px;
-}
-}
-
-/* =============================================================================
- Print Only
- ========================================================================== */
-@media print {
- /* configure printed page */
- @page {
- margin: 0.75in 1in;
- widows: 4;
- orphans: 4;
- }
-
- /* reset spacing metrics */
- html, body, .wrap {
- margin: 0 !important;
- padding: 0 !important;
- width: auto !important;
- }
-
- /* leave enough space on the left for bullets */
- body {
- padding-left: 20px !important;
- }
- #doc-col {
- margin-left: 0;
- }
-
- /* hide a bunch of non-content elements */
- #header, #footer, #nav-x, #side-nav,
- .training-nav-top, .training-nav-bottom,
- #doc-col .content-footer,
- .nav-x, .nav-y,
- .paging-links,
- a.totop {
- display: none !important;
- }
-
- /* remove extra space above page titles */
- #doc-col .content-header {
- margin-top: 0;
- }
-
- /* bump up spacing above subheadings */
- h2 {
- margin-top: 40px !important;
- }
-
- /* print link URLs where possible and give links default text color */
- p a:after {
- content: " (" attr(href) ")";
- font-size: 80%;
- }
- p a {
- word-wrap: break-word;
- }
- a {
- color: inherit;
- }
-
- /* syntax highlighting rules */
- .str { color: #060; }
- .kwd { color: #006; font-weight: bold; }
- .com { color: #600; font-style: italic; }
- .typ { color: #404; font-weight: bold; }
- .lit { color: #044; }
- .pun { color: #440; }
- .pln { color: #000; }
- .tag { color: #006; font-weight: bold; }
- .atn { color: #404; }
- .atv { color: #060; }
-}
-
-/* =============================================================================
- Columns
- ========================================================================== */
-
-@media screen, projection, print {
-.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
-}
-.wrap {
- margin: 0 auto;
- width: 940px;
- clear: both;
-}
-.cols {
- height: 1%;
- margin: 0 -1.533742331288343558282%;
- width: 103.06748466257669%}
-*+html .cols {
- margin-bottom: 20px;
-}
-.cols:after {
- clear: both;
- content: ' ';
- display: block;
- height: 0;
- visibility: hidden;
-}
-.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
-.col-13, .col-14, .col-15, .col-16 {
- display: inline;
- float: left;
- margin-left: 10px;
- margin-right: 10px;
-}
-/*
-* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
-.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12 {
- margin: 0;
- padding: 0 1.4% 20px;
-}
-[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
-[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
-[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
- float: right;
-}
-*/
-.col-1 { width: 40px }
-.col-2 { width: 100px }
-.col-3 { width: 160px }
-.col-4 { width: 220px }
-.col-5 { width: 280px }
-.col-6 { width: 340px }
-.col-7 { width: 400px }
-.col-8 { width: 460px }
-.col-9 { width: 520px }
-.col-10 { width: 580px }
-.col-11 { width: 640px }
-.col-12 { width: 700px }
-.col-13 { width: 760px }
-.col-14 { width: 820px }
-.col-15 { width: 880px }
-.col-16 { width: 940px }
-}
-
-.col-right {
- margin-right:0px;
-}
-
-@media screen and (max-width:772px) {
-.col-5, .col-6, .col-7 {
- clear: both;
- width: 97.0238096%}
-}
-
-/* =============================================================================
- Layout
- ========================================================================== */
-@media screen, projection, print {
-
-/* --------------------------------------------------------------------------
-Header, Login, Nav-X, Search
-*/
-#header {
- padding: 2.2em 0 0.2em 0;
-}
-#header:before, #header:after {
- content: "";
- display: table;
- clear: both
-}
-.logo, .nav-x {
- float: left;
-}
-.nav-x {
- margin-top: -2px;
- list-style-type: none;
-}
-.nav-x a {
- color: #333;
- font-size: 16px;
-}
-.design a.selected {
- color: #33b5e5;
-}
-.develop a.selected {
- color: #F80;
-}
-.distribute a.selected {
- color: #9C0;
-}
-
-
-
-.nav-x li {
- display: inline;
- margin-right: 45px;
-}
-.search {
- float: right;
- position: relative;
- width: 220px
-}
-.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a3a3a3;
-}
-.search .bottom {
- width: 220px;
- height: 1px;
- top: 24px;
- left: 0
-}
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-.search .left { top: 19px; left: 0 }
-.search .right { top: 19px; right: 0 }
-.search form {
- float: left;
- margin-top: 2px;
- width: inherit;
-}
-.search .close,
-#player-frame .close {
- position: absolute;
- right: 8px;
- bottom: 4px;
- width: 16px;
- height: 16px;
- margin: 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
- z-index:9999;
-}
-.search .close:hover, .search .close:focus,
-#player-frame .close:hover, #player-frame .close:focus {
- background-position: -16px 0;
- cursor:pointer;
-}
-#player-frame .close {
- top: 6px;
-}
-.search form input {
- color: #999;
- font-size: 1em;
- width: inherit;
- border: none;
- margin: 0;
- padding:0 0 0 6px;
- z-index: 1500;
- background-color: transparent
-}
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-.search:hover .icon {
- background-position: -8px 0
-}
-.search form input:focus {
- color: #222;
- font-weight: bold;
- outline:0;
-}
-/* Search Dropdown */
-.search-dropdown {
- padding: 15px;
- width: 192px;
- border: solid 1px #c5c5c5;
- background: #fff;
- position: absolute;
- top: 35px;
- left: 0;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- box-shadow: 0 0 10px rgba(0,0,0,0.2)
-}
-.search-dropdown ul, .search-dropdown ul li {
- list-style-type: none;
- margin: 0;
- padding: 0
-}
-.search-dropdown ul li {
- clear: both
-}
-.search-dropdown img {
- float: left;
- margin: 0 10px 10px 0
-}
-.search-dropdown h6 {
- color: #222;
- margin: 0;
- line-height: normal
-}
-.search-dropdown .desc {
- color: #999;
- font-size: 11.5px;
- line-height: normal;
- margin: 0;
-}
-.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
- color: #33b5e5
-}
-/* --------------------------------------------------------------------------
-Buttons
-*/
-.button, a.button, .button-secondary, a.button-secondary {
- border-image: initial;
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- cursor: pointer;
-}
-.button, a.button {
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#0099cc',GradientType=0);
- border: 1px solid #3990ab;
- color: #fff;
-}
-.button-secondary, a.button-secondary {
- background-color: #f3f3f3;
- border: 1px solid #dcdcdc;
- color: #444;
-}
-a.button, a.button:visited, a.button-secondary, a.button-secondary:visited {
- height: 28px;
- line-height: 28px;
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 8px 15px;
- text-align: center;
-}
-.button, .button-secondary {
- height: 34px;
- line-height: 34px;
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 0 15px;
- text-align: center;
-}
-.button:hover, a.button:hover {
- border-color: #09c;
- background-color: #4cadcb;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5dbcd9), to(#4cadcb));
- background-image: -webkit-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -moz-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -ms-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -o-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: linear-gradient(top, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9',
-EndColorStr='#4cadcb',GradientType=0);
- color: #fff !important;
-}
-.button:active, a.button:active {
- background-color: #1e799a;
- background-image: none;
- border-color: #30b7e6;
-}
-.button-secondary:hover, a.button-secondary:hover {
- border-color: #dbdbdb;
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5 !important;
-}
-.button-secondary:active, a.button-secondary:active {
- border-color: #dadada;
- background: #ebebeb; /* Old browsers */
- /* IE9 SVG, needs conditional override of 'filter' to 'none' */
- background:
-url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/
-Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0Jv
-eD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+
-CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIg
-eDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJl
-YiIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZhZmFmYSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNmY2ZjYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFy
-R3JhZGllbnQ+
-CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIg
-Lz4KPC9zdmc+);
- background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
-#ffffff 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
-color-stop(5%,#f9f9f9), color-stop(50%,#fafafa), color-stop(90%,#f9f9f9), color-stop(100%,#ffffff));
-/* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
-90%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* IE10+ */
- background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
-endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- color: #258AAF !important;
-}
-.button.big {
- font-size:20px;
- display:inline-block;
-}
-
-.button.disabled,
-.button.disabled:hover,
-.button.disabled:active {
- background:#ebebeb;
- color:#999;
- border-color:#999;
- cursor:default;
-}
-
-.training-nav-top a.button-secondary,
-.training-nav-bottom a.button-secondary {
- display:block;
- float:left;
- margin:0;
- width:130px;
- text-transform:uppercase;
- font-weight:bold;
-
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
-}
-
-.training-nav-top a.button-secondary:hover,
-.training-nav-bottom a.button-secondary:hover {
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990ab;
- color: #fff !important;
-}
-
-.training-nav-top a.button-secondary.last,
-.training-nav-bottom a.button-secondary.last {
- border-left:0;
-}
-
-.training-nav-top a.button-secondary.double-size,
-.training-nav-bottom a.button-secondary.double-size {
- width:291px;
-}
-
-.training-nav-top,
-.training-nav-bottom {
- float:right;
- margin:0 0 0 20px;
-}
-
-.training-nav-bottom {
- padding:0 0 20px;
-}
-
-#tb-wrapper,
-#qv-wrapper {
- float:right;
- clear:right;
- margin:-27px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
- padding:0 0 20px;
-}
-
-#tb,
-#qv {
- font-size:13px;
- line-height:18px;
- width:238px;
- border:1px solid #ccc;
- float:right;
-}
-
-#tb {
- width:278px;
-}
-
-#tb h2,
-#qv h2 {
- margin:10px 15px;
- padding:0;
- text-transform:uppercase;
- border-bottom:1px solid gainsboro;
-}
-
-#tb *,
-#qv * {
- font-size:inherit;
-}
-
-#tb .download-box {
- padding:0 0 0 15px;
-}
-
-#tb .download-box .filename {
- font-size:11px;
- margin:4px 4px 10px;
- color:#666;
-}
-
-
-/* Dev guide quicknav */
-
-.sidebox-wrapper {
- float:right;
- clear:right;
- margin:0 0 0 20px;
- padding:0 0 20px;
-}
-
-.sidebox {
- width:226px;
- font-size:13px;
- line-height:18px;
- border-left:4px solid #99CC00;
- float:right;
- padding:0 0 0 10px;
-}
-
-.sidebox h2,
-.sidebox h3,
-.sidebox h4,
-.sidebox h5 {
- font-weight:bold;
- margin:0 0 10px;
-}
-
-.sidebox * {
- font-size:inherit;
-}
-
-#tb ol,
-#tb ul,
-#qv ul {
- margin:0 15px 10px 35px;
-}
-
-#qv ol {
- list-style:none;
- margin:0 15px 15px;
- font-size:inherit;
- line-height:inherit;
-}
-
-#tb ol ol,
-#tb ul ul,
-#qv ol ol,
-#qv ul ul,
-.sidebox ol ol,
-.sidebox ul ul {
- margin-bottom:0;
-}
-
-#qv ol ol {
- margin:3px 0 3px 15px;
-}
-
-.sidebox p,
-#qv p,
-#tb p {
- margin: 0 0 10px;
-}
-
-
-/* --------------------------------------------------------------------------
-Form
-*/
-.article form {
- margin: 0 0 20px;
-}
-.article form .form-required {
- color: #dd4b39;
-}
-.article form fieldset {
- margin: 0 0 20px;
- padding: 0;
-}
-.article form legend {
- display: block;
- line-height: 1.5;
- margin: 0;
- padding: 0;
-}
-/*
-.article form ol, .article form ul {
- margin: 0 0 0 1em;
- padding: 0 0 0 1em;
-}
-[dir='rtl'] .article form ol, [dir='rtl'] .article form ul {
- margin: 0 1em 0 0;
- padding: 0 1em 0 0;
-}
-.article form ol ul, .article form ul ul, [dir='rtl'] .article form ol ul, [dir='rtl'] .article form
-ul ul {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-.article form li {
- margin: 0 0 20px;
-}
-.article form li li {
- margin: 0 0 5px;
-}
-*/
-.article form label {
- display: block;
- margin: 0 0 5px;
- padding: 0;
-}
-.article form input[type='text'], .article form select, .article form textarea, .article form
-.checkbox-group, .article form .radio-group {
- margin-bottom: 15px;
-}
-.checkbox-group input {
- width: 13px;
- height: 13px;
- background: #fff;
- border: solid 1px #c6c6c6;
- float: left;
-}
-.article form .checkbox-group, .article form .radio-group {
- display: block
-}
-.article form select {
- border: solid 1px #ebebeb;
- border-top-color: #ddd;
- -webkit-appearance: none;
- background: #f3f3f3 url(../images/arrows-up-down.png) right center no-repeat;
- height: 30px;
- color: #222;
- line-height: normal;
- padding: 5px;
- width: 130px;
-}
-
-.article form .browse .browse-msg {
- font-size: 11.5px;
-}
-.article form .browse .button-secondary {
- height: auto;
- line-height: 25px;
- font-size: 11px;
- padding: 0 8px;
- margin: 0 10px 15px 0;
-}
-.article form input[type='text'], .article form textarea {
- border: 1px solid #ebebeb;
- border-top-color: #dcdcdc;
- color: #222;
- line-height: normal;
- padding: 6px 10px;
- width: 300px;
-}
-.article form textarea {
- height: 150px;
-}
-.article form input[type='text']:focus, .article form textarea:focus {
- border-color: #33B5E5;
- -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- -o-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, .2);
- outline: 0;
-}
-.article form input[disabled], .article form textarea[disabled], .article form label.form-disabled {
- color: #999;
-}
-.article form input[type='text'][disabled], .article form textarea[disabled] {
- background-color: #ebebeb;
-}
-form .form-error input[type='text'], form .form-error textarea {
- border-color: #dd4b39;
- margin-right: 20px;
-}
-.aside {
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- margin: 10px 0;
- padding: 20px;
- color: #666;
- position: relative;
- background: #f9f9f9;
-}
-/*
-.aside, .notification, .promo {
- -moz-border-radius: 2px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
- margin: 10px 0;
- padding: 10px;
- position: relative;
-}
-.aside>:first-child, .notification>:first-child, .promo>:first-child {
- margin-top: 0;
-}
-.aside>:last-child, .notification>:last-child, .promo>:last-child {
- margin-bottom: 0;
-}
-.aside {
- background: #f9f9f9;
-}
-.notification {
- background: #fffbe4;
- border-color: #f8f6e6;
-}
-.promo {
- background: #f6f9ff;
- border-color: #eff2f9;
-}
-*/
-/* --------------------------------------------------------------------------
-Code Style
-*/
-pre {
- margin: 1em 0;
- padding: 1em;
- overflow: auto;
- border: solid 1px #ddd;
- background: #f7f7f7;
-}
-.str { color: #080; }
-.kwd { color: #008; }
-.com { color: #800; }
-.typ { color: #606; }
-.lit { color: #066; }
-.pun { color: #660; }
-.pln { color: #000; }
-.tag { color: #008; }
-.atn { color: #828; }
-.atv { color: #080; }
-.dec { color: #606; }
-
-/* --------------------------------------------------------------------------
-Three-Pane
-*/
-/* Package Nav & Classes Nav */
-.three-pane {
- position: relative;
- border-top: solid 1px #ebebeb;
-}
-#packages-nav .js-pane,
-#classes-nav .js-pane {
- overflow:visible;
-}
-#packages-nav {
- height:270px;
- max-height: inherit;
- overflow: hidden;
- position: relative;
-}
-#classes-nav {
- overflow: hidden;
- position: relative;
-}
-#packages-nav ul, #classes-nav ul {
- list-style-type: none;
- margin: 10px 0 20px 0;
- padding: 0;
-}
-#classes-nav li {
- font-weight: bold;
- margin: 5px 0;
-}
-#packages-nav li,
-#classes-nav li li {
- margin: 0;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li a, #classes-nav li a:active, #classes-nav li a:visited {
- padding: 0 0 0 4px;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited,
-#nav-tree li a, #nav-tree li a:active, #nav-tree li a:visited {
- color: #222;
- font-weight: normal;
-}
-#packages-nav li a, #packages-nav li a:active, #packages-nav li a:visited,
-#classes-nav li li a, #classes-nav li li a:active, #classes-nav li li a:visited {
- display: block;
-}
-#packages-nav li.selected a, #packages-nav li.selected a:active, #packages-nav li.selected
-a:visited,
-#classes-nav li li.selected a, #classes-nav li li.selected a:active, #classes-nav li li.selected
-a:visited,
-#nav-tree li div.selected {
- font-weight: 500;
- color: #0099cc;
- background-color:#fff; }
- #packages-nav li.selected ul li a,
- #classes-nav li.selected ul li a {
- /* don't highlight child items */
- color: #555555; }
-#nav-tree li div.selected a {
- font-weight: 500;
- color: #0099cc;
-}
-#nav-swap {
- height:30px;
- border-top:1px solid #ccc;
-}
-#nav-swap a {
- display:inline-block;
- height:100%;
- color: #222;
- font-size: 12px;
- padding: 5px 0 5px 5px;
-}
-
-#nav-swap .fullscreen {
- float: right;
- width: 24px;
- height: 24px;
- text-indent: -1000em;
- padding:0;
- margin:3px 5px 0;
- background: url(../images/fullscreen.png) no-repeat -24px 0;
-}
-#nav-swap .fullscreen.disabled {
- background-position: 0 0;
-}
-#nav-swap .fullscreen:hover,
-#nav-swap .fullscreen:focus {
- cursor:pointer;
-}
-
-
-/* nav tree */
-#side-nav, #devdoc-nav, #swapper,
-#nav-tree, #tree-list {
- overflow:hidden;
- margin-left:0;
-}
-
-#nav-tree ul {
- list-style:none;
- padding:0;
- margin:10px 0;
-}
-
-#nav-tree ul li div {
- padding:0 0 0 4px;
-}
-
-#side-nav #nav-tree ul li a,
-#side-nav #nav-tree ul li span.no-children {
- padding: 0;
- margin: 0;
-}
-
-#nav-tree .plus {
- margin: 0 3px 0 0;
-}
-
-#nav-tree ul ul {
- list-style: none;
- margin: 0;
- padding: 0 0 0 0;
-}
-
-#nav-tree ul li {
- margin: 0;
- padding: 0 0 0 0;
- white-space: nowrap;
-}
-
-#nav-tree .children_ul {
- padding:0;
- margin:0;
-}
-#nav-tree .children_ul li div {
- padding:0 0 0 10px;
-}
-#nav-tree .children_ul .children_ul li div {
- padding:0 0 0 20px;
-}
-
-#nav-tree a.nolink {
- color: #222;
- text-decoration: none;
-}
-
-#nav-tree span.label {
- width: 100%;
-}
-
-#nav-tree {
- overflow-x: auto;
- overflow-y: scroll;
- outline:0;
-}
-
-
-/* Content */
-#doc-col {
- margin-right:0;
-}
-#doc-content-container {
- margin-left: 291px
-}
-#doc-header, #doc-content {
- padding: 1em 2em;
-}
-#doc-header {
- background: #f7f7f7;
-}
-#doc-header h1 {
- line-height: 0;
- margin-bottom: 15px;
-}
-#api-info-block {
- float: right;
- font-weight: bold;
-}
-#api-info-block a, #api-info-block a:active, #api-info-block a:visited {
- color: #222;
-}
-#api-info-block a:hover, #api-info-block a:focus {
- color: #33B5E5;
-}
-#api-nav-header {
- height:19px; /* plus 16px padding = 35; same as #nav li */
- font-size:14px;
- padding: 8px 0;
- margin: 0;
- border-bottom: 1px solid #CCC;
- background:#e9e9e9;
- background: rgba(0, 0, 0, 0.05); /* matches #nav li.expanded */
-
-}
-#api-nav-title {
- padding:0 5px;
- white-space:nowrap;
-}
-
-#api-level-toggle {
- float:right;
- padding:0 5px;
-}
-
-#api-level-toggle label {
- margin:0;
- vertical-align:top;
- line-height: 19px;
- font-size:13px;
- height: 19px;
-}
-
-#api-level-toggle .select-wrapper {
- width: 35px;
- display: inline-block;
- overflow: hidden;
-}
-#api-level-toggle select {
- border: 0;
- appearance:none;
- -moz-appearance:none;
- -webkit-appearance: none;
- background: transparent url(../images/arrows-up-down.png) 23px 5px no-repeat;
- color: #222;
- height: 19px;
- line-height: 19px;
- padding: 0;
- margin:1px 0 0 0;
- width:150%;
- font-size:13px;
- vertical-align:top;
- outline:0;
-}
-
-
-/* Toggle for revision notes and stuff */
-div.toggle-content.closed .toggle-content-toggleme {
- display:none;
-}
-
-#jd-content img.toggle-content-img {
- margin:0 5px 5px 0;
-}
-div.toggle-content p {
- margin:10px 0 0;
-}
-div.toggle-content-toggleme {
- padding:0 0 0 15px;
-}
-
-
-/* API LEVEL FILTERED MEMBERS */
-
-.absent,
-.absent a:link,
-.absent a:visited,
-.absent a:hover,
-.absent * {
- color:#bbb !important;
- cursor:default !important;
- text-decoration:none !important;
-}
-#devdoc-nav li.absent.selected,
-#devdoc-nav li.absent.selected *,
-#devdoc-nav div.label.absent.selected,
-#devdoc-nav div.label.absent.selected * {
- background-color:#eaeaea !important;
-}
-.absent h4.jd-details-title,
-.absent h4.jd-details-title * {
- background-color:#f6f6f6 !important;
-}
-.absent img {
- opacity: .3;
- filter: alpha(opacity=30);
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
-}
-
-
-
-
-
-
-
-
-
-/* JQUERY RESIZABLE STYLES */
-.ui-resizable { position: relative; }
-.ui-resizable-handle { position: absolute; display: none; font-size: 0.1px; z-index:1; }
-.ui-resizable .ui-resizable-handle { display: block; border-bottom: 1px solid #e4e4e4; }
-/*body .ui-resizable-disabled .ui-resizable-handle { display: none; }
-body .ui-resizable-autohide .ui-resizable-handle { display: none; }*/
-.ui-resizable-s { cursor: s-resize; height: 10px; width: 100% !important; bottom: -11px; left: 0;
-border-bottom: solid 1px #ededed;
- background: #f7f7f7 url("../images/resizable-s2.png") no-repeat scroll center center; }
-/*
-.ui-resizable-e {
-cursor: e-resize; width: 10px; right: 0; top: 0; height: 100%; border-right: solid
-1px #ededed;background: #f7f7f7 url("../images/resizable-e2.png") no-repeat scroll center center; }
-*/
-
-/* --------------------------------------------------------------------------
-Lightbox
-*/
-.lightbox {
- width: 769px;
- padding: 1.5em;
- margin: 0 auto;
- border: solid 1px #dcdcdc;
- background: #fff;
- -moz-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- -webkit-box-shadow: 1px 1px 5px rgba(0,0,0,0.1);
- box-shadow: 1px 1px 5px rgba(0,0,0,0.1)
-}
-.lightbox .header {
- float: left;
- width: 720px;
- margin: -10px 20px 10px 0;
-}
-.lightbox .close {
- float: right;
- width: 10px;
- height: 10px;
- margin: -10px -10px 10px 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
-}
-.lightbox .close:hover, .lightbox .close:focus {
- background-position: -10px 0;
-}
-
-/* --------------------------------------------------------------------------
-Misc
-*/
-
-
-.clearfix:before, .clearfix:after {
- content: "";
- display: table
-}
-.clearfix:after {
- clear: both
-}
-.clearfix {
- *zoom: 1
-}
-table.blank th, table.blank td {
- border: 0;
- background: none
-}
-.caption {
- margin: 0.5em 0 2em 0;
- color: #000;
- font-size: 11.5px;
-}
-
-.nolist {
- list-style:none;
- margin-left:0;
-}
-
-
-pre.classic {
- background-color:transparent;
- border:none;
- padding:0;
-}
-
-p.img-caption {
- margin: -10px 0 20px;
- font-size:13px;
- color:#666;
-}
-
-div.figure {
- float:right;
- clear:right;
- margin:10px 0 0 0;
- padding:0 0 0 20px;
- /* width must be defined w/ an inline style matching the image width */
-}
-
-p.table-caption {
- margin: 0 0 4px 0; /* matches default table left-margin */
- font-size:13px;
- color:#666;
-}
-
-div.note,
-div.caution,
-div.warning {
- margin: 0 0 15px;
-}
-
-p.note, div.note,
-p.caution, div.caution,
-p.warning, div.warning {
- padding: 0 0 0 10px;
- border-left: 4px solid;
-}
-
-p.note {
- border-color: #258AAF;
-}
-
-p.caution {
- border-color: #FF8800;
-}
-
-p.warning {
- border-color: #ff4443;
-}
-
-div.note.design {
- border-left: 4px solid #33B5E5;
-}
-
-div.note.develop {
- border-left: 4px solid #F80;
-}
-
-div.note.distribute {
- border-left: 4px solid #9C0;
-}
-
-.note p, .caution p, .warning p {
- margin:0 0 5px;
-}
-
-.note p:last-child, .caution p:last-child, .warning p:last-child {
- margin-bottom:0;
-}
-
-blockquote {
- display:block;
- float:right;
- width:280px;
- font-size:20px;
- font-style:italic;
- line-height:24px;
- color:#33B5E5;
- margin:0 0 20px 30px;
-}
-
-div.design-announce p {
- margin:0 0 10px;
-}
-
-#devdoc-nav a.totop {
- display:block;
- top:0;
- width:inherit;
- background: transparent url(../images/styles/gototop.png) no-repeat scroll 50% 50%;
- text-indent:-9999em;
-}
-#devdoc-nav a.totop {
- position:fixed;
- display:none;
-}
-#devdoc-nav a.totop:hover {
- background-color:#33B5E5;
-}
-
-.content-footer a.totop {
- text-transform:uppercase;
- line-height:30px;
-}
-
-/* -----------------------------------------------
-Dialog box for popup messages
-*/
-
-div.dialog {
- height:0;
- margin:0 auto;
-}
-
-div.dialog>div {
- z-index:99;
- position:fixed;
- margin:70px 0;
- width: 391px;
- height: 200px;
- background: #F7F7F7;
--moz-box-shadow: 0 0 15px rgba(0,0,0,0.5);
--webkit-box-shadow: 0 0 15px rgba(0,0,0,0.5);
-box-shadow: 0 0 15px rgba(0,0,0,0.5);
-}
-/* IE6 can't position fixed */
-* html div.dialog div { position:absolute; }
-
-
-div#deprecatedSticker {
- display:none;
- z-index:99;
- position:fixed;
- right:15px;
- top:114px;
- margin:0;
- padding:1em;
- background:#FFF;
- border:1px solid #dddd00;
- box-shadow:-5px 5px 10px #ccc;
- -moz-box-shadow:-5px 5px 10px #ccc;
- -webkit-box-shadow:-5px 5px 10px #ccc;
-}
-
-div#naMessage {
- display:none;
- width:555px;
- height:0;
- margin:0 auto;
-}
-
-div#naMessage div {
- z-index:99;
- width:450px;
- position:fixed;
- margin:50px 0;
- padding:4em 4em 3em;
- background:#FFF;
- border:1px solid #999;
- box-shadow:-10px 10px 40px #888;
- -moz-box-shadow:-10px 10px 40px #888;
- -webkit-box-shadow:-10px 10px 40px #888;
-}
-/* IE6 can't position fixed */
-* html div#naMessage div { position:absolute; }
-
-div#naMessage strong {
- font-size:1.1em;
-}
-
-
-/* --------------------------------------------------------------------------
-Slideshow Controls & Next/Prev
-*/
-.slideshow-next, .slideshow-prev {
- width: 20px;
- height: 36px;
- text-indent: -1000em;
-}
-.slideshow-container {
- margin: 2em 0;
-}
-.slideshow-container:before, .slideshow-container:after {
- content: "";
- display: table;
- clear: both;
-}
-a.slideshow-next, a.slideshow-next:visited {
-
- float: right;
-
- background: url(../images/arrow-right.png) no-repeat 0 0
-
-}
-
-a.slideshow-prev, a.slideshow-prev:visited {
-
- float: left;
-
- background: url(../images/arrow-left.png) no-repeat 0 0
-
-}
-
-.slideshow-next:hover, .slideshow-prev:hover, .slideshow-next:focus, .slideshow-prev:focus {
-
- background-position: 0 -36px
-
-}
-
-.slideshow-next:active, .slideshow-prev:active {
-
- background-position: 0 -72px
-
-}
-.slideshow-nav {
- width: 74px;
- margin: 0 auto;
-}
-.slideshow-nav a, .slideshow-nav a:visited {
- display: inline-block;
- width: 12px;
- height: 12px;
- margin: 0 2px 20px 2px;
- background: #ccc;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
-}
-.slideshow-nav a:hover, .slideshow-nav a:focus {
-
- background: #33B5E5
-}
-
-.slideshow-nav a:active {
-
- background: #1e799a;
- background: #ebebeb;
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
-}
-.slideshow-nav a.active, .slideshow-nav a.active:active, .slideshow-nav a.active:visited {
- background: #33B5E5
-}
-/* --------------------------------------------------------------------------
-Tabs
-*/
-ul.tabs {
- padding: 0;
- margin: 2em 0 0 0;
-}
-ul.tabs:before, ul.tabs:after {
- content: "";
- display: table;
- clear: both;
-}
-ul.tabs li {
- list-style-type: none;
- float: left;
-}
-ul.tabs li a, ul.tabs li a:active, ul.tabs li a:visited {
- display: block;
- height: 36px;
- line-height: 36px;
- padding: 0 15px;
- margin-right: 2px;
- color: #222;
- -moz-border-radius-topleft: 2px;
- -moz-border-radius-topright: 2px;
- -moz-border-radius-bottomright: px;
- -moz-border-radius-bottomleft: px;
- -webkit-border-radius: 2px 2px px px;
- border-radius: 2px 2px px px;
- border-top: solid 1px #ebebeb;
- border-left: solid 1px #ebebeb;
- border-right: solid 1px #ebebeb;
- background-color: #fff;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#fafafa));
- background-image: -webkit-linear-gradient(top, #ffffff, #fafafa);
- background-image: -moz-linear-gradient(top, #ffffff, #fafafa);
- background-image: -ms-linear-gradient(top, #ffffff, #fafafa);
- background-image: -o-linear-gradient(top, #ffffff, #fafafa);
- background-image: linear-gradient(top, #ffffff, #fafafa);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff',
-EndColorStr='#fafafa');
-}
-ul.tabs li a:hover {
- color: #33B5E5;
-}
-ul.tabs li a.selected {
- height: 37px;
- color: #33B5E5;
- background-color: #f7f7f7;
- background-image: none;
- border-color: #ddd;
-}
-.tab-content {
- padding: 1.2em;
- margin: -1px 0 2em 0;
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- border: solid 1px #ddd;
- background: #f7f7f7;
-}
-/* --------------------------------------------------------------------------
-Feature Boxes
-*/
-.feature-box {
- width: 291px;
- height: 200px;
- position: relative;
- background: #F7F7F7;
-}
-.box-border .top, .box-border .bottom, .box-border .left, .box-border .right {
- z-index: 100;
- position: absolute;
- background-color: #aaa;
-}
-.box-border .top, .box-border .bottom {
- width: 291px;
- height: 1px;
-}
-.dialog .box-border .top,
-.dialog .box-border .bottom { width:391px; }
-
-.box-border .left, .box-border .right {
- width: 1px;
- height: 8px;
-}
-.box-border .top { top: 0; left: 0 }
-.box-border .top .left { top: 1px; left: 0 }
-.box-border .top .right { top: 1px; right: 0 }
-.box-border .bottom .left { top: -8px; left: 0 }
-.box-border .bottom { top: 200px; left: 0 }
-.box-border .bottom .right { top: -8px; right: 0 }
-
-.feature-box h4,
-.dialog h4 {
- margin: 15px 18px 10px;
- padding:0;
-}
-
-.feature-box p,
-.dialog p {
- margin: 10px 18px;
- padding:0;
-}
-.feature-box .link,
-.dialog .link {
- border-top: 1px solid #dedede;
- bottom: 0;
- position: absolute;
- width: inherit;
-}
-.feature-box a, .feature-box h4,
-.dialog a, .dialog h4 {
- -webkit-transition: color .4s ease;
- -moz-transition: color .4s ease;
- -o-transition: color .4s ease;
- transition: color .4s ease;
-}
-.feature-box:hover {
- cursor: pointer;
-}
-.feature-box:hover .box-border .top, .feature-box:hover .box-border .bottom, .feature-box:hover
-.left, .feature-box:hover .right {
- background-color: #33B5E5;
-}
-.feature-box:hover h4, .feature-box:hover a {
- color: #33B5E5;
-}
-/* --------------------------------------------------------------------------
-Page-Specific Styles
-*/
-.colors {
- position: relative;
- float: left;
- width: 92px;
- margin: 40px 0 20px;
-}
-.colors div {
- color: #fff;
- font-size: 11.5px;
- width: 82px;
- height: 82px;
- margin-top:-30px;
- line-height: 82px;
- text-align: center;
- border: solid 5px #fff;
- -webkit-border-radius: 50%;
- -moz-border-radius: 50%;
- border-radius: 50%;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* ########### REFERENCE DOCS ################## */
-
-#packages-nav h2,
-#classes-nav h2 {
- font-size:18px;
- margin:0;
- padding:0 0 0 4px;
-}
-
-#jd-header {
- padding: 0 0 5px;
- margin: 20px 0 10px;
- font-size:13px;
- border-bottom:solid 1px #ccc;
-}
-
-#jd-header h1 {
- margin:0;
- padding:0;
-}
-
-/* page-top-right container for reference pages (holds
-links to summary tables) */
-#api-info-block {
- font-size:13px;
- margin:20px 0 0;
- padding:0 10px 6px;
- font-weight:normal;
- float:right;
- text-align:right;
- color:#999;
- max-width:70%;
-}
-
-#api-info-block div.api-level {
- font-weight:bold;
- font-size:inherit;
- float:none;
- color:#222;
- padding:0;
- margin:0;
-}
-
-/* inheritance table */
-.jd-inheritance-table {
- border-spacing:0;
- margin:0;
- padding:0;
- font-size:13px;
- background-color:transparent;
-}
-.jd-inheritance-table tr td {
- border: none;
- margin: 0;
- padding: 0;
- background-color:transparent;
-}
-.jd-inheritance-table .jd-inheritance-space {
- font-weight:bold;
- width:1em;
-}
-.jd-inheritance-table .jd-inheritance-interface-cell {
- padding-left: 17px;
-}
-
-
-
-.jd-sumtable a {
- text-decoration:none;
-}
-
-.jd-sumtable a:hover {
- text-decoration:underline;
-}
-
-/* the link inside a sumtable for "Show All/Hide All" */
-.toggle-all {
- display:block;
- float:right;
- font-weight:normal;
- font-size:0.9em;
-}
-
-/* adjustments for in/direct subclasses tables */
-.jd-sumtable.jd-sumtable-subclasses {
- margin: 1em 0 0 0;
- max-width:968px;
- background-color:transparent;
- font-size:13px;
-}
-
-/* extra space between end of method name and open-paren */
-.sympad {
- margin-right: 2px;
-}
-
-/* right alignment for the return type in sumtable */
-.jd-sumtable .jd-typecol {
- text-align:right;
-}
-
-/* adjustments for the expando table-in-table */
-.jd-sumtable-expando {
- margin:.5em 0;
- padding:0;
-}
-
-/* a div that holds a short description */
-.jd-descrdiv {
- padding:3px 1em 0 1em;
- margin:0;
- border:0;
-}
-
-#jd-content img.jd-expando-trigger-img {
- padding:0 4px 4px 0;
- margin:0;
-}
-
-.jd-sumtable-subclasses div#subclasses-direct,
-.jd-sumtable-subclasses div#subclasses-indirect {
- margin:0 0 0 13px;
-}
-
-
-
-/********* MEMBER REF *************/
-
-
-.jd-details {
-/* border:1px solid #669999;
- padding:4px; */
- margin:0 0 1em;
-}
-
-/* API reference: a container for the
-.tagdata blocks that make up the detailed
-description */
-.jd-details-descr {
- padding:0;
- margin:.5em .25em;
-}
-
-/* API reference: a block containing
-a detailed description, a params table,
-seealso list, etc */
-.jd-tagdata {
- margin:.5em 1em;
-}
-
-.jd-tagdata p {
- margin:0 0 1em 1em;
-}
-
-/* API reference: adjustments to
-the detailed description block */
-.jd-tagdescr {
- margin:.25em 0 .75em 0;
-}
-
-.jd-tagdescr ol,
-.jd-tagdescr ul {
- margin:0 2.5em;
- padding:0;
-}
-
-.jd-tagdescr table,
-.jd-tagdescr img {
- margin:.25em 1em;
-}
-
-.jd-tagdescr li {
-margin:0 0 .25em 0;
-padding:0;
-}
-
-/* API reference: heading marking
-the details section for constants,
-attrs, methods, etc. */
-h4.jd-details-title {
- font-size:1.15em;
- background-color: #E2E2E2;
- margin:1.5em 0 .6em;
- padding:3px 95px 3px 3px; /* room for api-level */
-}
-
-h4.jd-tagtitle {
- margin:0;
-}
-
-h4 .normal {
- font-weight:normal;
-}
-
-/* API reference: heading for "Parameters", "See Also", etc.,
-in details sections */
-h5.jd-tagtitle {
- margin:0 0 .25em 0;
- font-size:1em;
-}
-
-.jd-tagtable {
- margin:0;
- background-color:transparent;
- width:auto;
-}
-
-.jd-tagtable td,
-.jd-tagtable th {
- border:none;
- background-color:#fff;
- vertical-align:top;
- font-weight:normal;
- padding:2px 10px;
-}
-
-.jd-tagtable th {
- font-style:italic;
-}
-
-/* Inline api level indicator for methods */
-div.api-level {
- font-size:.8em;
- font-weight:normal;
- color:#999;
- float:right;
- padding:0 8px 0;
- margin-top:-30px;
-}
-
-table.jd-tagtable td,
-table.jd-tagtable th {
- background-color:transparent;
-}
-
-table.jd-tagtable th {
- color:inherit;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/* SEARCH FILTER */
-
-#search_autocomplete {
- font-weight:normal;
-}
-
-#search_filtered_wrapper {
- width: 193px;
- float: right;
-}
-#search_filtered_div {
- position:absolute;
- z-index:9999;
- min-width:171px; /* +padding and border makes this match input width */
- padding:5px;
- border: solid 1px #C5C5C5;
- background: white;
- top: 35px;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
-}
-
-ul#search_filtered {
- min-width:100%;
- margin:0;
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-
-#search_filtered li{
- line-height:1.5em;
- margin: 0 0 2px;
- padding: 0;
-}
-
-#search_filtered li a {
- padding:0 5px;
- color:#222 !important;
-}
-
-#search_filtered .jd-selected {
- background-color: #33B5E5;
- cursor:pointer;
-}
-#search_filtered .jd-selected,
-#search_filtered .jd-selected a {
- color:#f7f7f7 !important;
-}
-
-.no-display {
- display: none;
-}
-
-.jd-autocomplete {
- padding-left: 6px;
- padding-right: 6px;
- padding-top: 1px;
- padding-bottom: 1px;
- font-size: 0.81em;
- border: none;
- margin: 0;
- line-height: 1.05em;
-}
-
-.show-item {
- display: table-row;
-}
-.hide-item {
- display: hidden;
-}
-
-
-
-
-
-/* SEARCH RESULTS */
-
-
-#leftSearchControl .gsc-twiddle {
- background-image : none;
-}
-
-#leftSearchControl td, #searchForm td {
- border: 0px solid #000;
- padding:0;
-}
-
-#leftSearchControl .gsc-resultsHeader .gsc-title {
- padding-left : 0px;
- font-weight : bold;
- font-size : 13px;
- color:#006699;
- display : none;
-}
-
-#leftSearchControl .gsc-resultsHeader div.gsc-results-selector {
- display : none;
-}
-
-#leftSearchControl .gsc-resultsRoot {
- padding-top : 6px;
-}
-
-#leftSearchControl div.gs-visibleUrl-long {
- display : block;
- color:#006699;
-}
-
-#leftSearchControl .gsc-webResult {
- padding:0 0 20px 0;
-}
-
-.gsc-webResult div.gs-visibleUrl-short,
-table.gsc-branding,
-.gsc-clear-button {
- display : none;
-}
-
-.gsc-cursor-box .gsc-cursor div.gsc-cursor-page,
-.gsc-cursor-box .gsc-trailing-more-results a.gsc-trailing-more-results,
-#leftSearchControl a,
-#leftSearchControl a b {
- color:#006699;
-}
-
-.gsc-resultsHeader {
- display: none;
-}
-
-/* Disable built in search forms */
-.gsc-control form.gsc-search-box {
- display : none;
-}
-table.gsc-search-box {
- margin:6px 0 0 0;
- border-collapse:collapse;
-}
-
-td.gsc-input {
- padding:0 2px;
- width:100%;
- vertical-align:middle;
-}
-
-input.gsc-input {
- border:1px solid #BCCDF0;
- width:99%;
- padding-left:2px;
- font-size:.95em;
-}
-
-td.gsc-search-button {
- text-align: right;
- padding:0;
- vertical-align:top;
-}
-
-
-#searchResults {
- overflow:hidden; /* because the repositioned page links makes the section think it needs to scroll
-(it doesn't) */
- height:auto;
-}
-
-#searchResults .gsc-control {
- position:relative;
- width:auto;
- padding:0 0 10px;
-}
-
-#searchResults .gsc-tabsArea {
- position:relative;
- white-space:nowrap;
- float:left;
- width:200px;
-}
-
-#searchResults .gsc-above-wrapper-area {
- display:none;
-}
-
-#searchResults .gsc-resultsbox-visible {
- float:left;
- width:720px;
- margin-left:20px;
-}
-
-#searchResults .gsc-tabHeader {
- padding: 3px 6px;
- position:relative;
- width:auto;
- display:block;
-}
-
-#searchResults h2#searchTitle {
- padding:0;
- margin:5px 0;
- border:none;
-}
-
-#searchResults h2#searchTitle em {
- font-style:normal;
- color:#33B5E5;
-}
-
-#searchResults .gsc-table-result {
- margin:5px 0 10px 0;
- background-color:transparent;
-}
-#searchResults .gs-web-image-box, .gs-promotion-image-box {
- width:120px;
-}
-#searchResults .gs-web-image-box img.gs-image, .gs-promotion-image-box img.gs-promotion-image {
- max-width:120px;
-}
-
-#searchResults .gsc-table-result .gsc-thumbnail {
- padding:0 20px 0 0;
-}
-
-#searchResults td {
- background-color:transparent;
-}
-
-#searchResults .gsc-expansionArea {
- position:relative;
-}
-#searchResults .gsc-tabsArea .gsc-cursor-box {
- width:200px;
- padding:20px 0 0 1px;
-}
-#searchResults .gsc-cursor-page {
- display:inline-block;
- float:left;
- margin:-1px 0 0 -1px;
- padding:0;
- height:27px;
- width:27px;
- text-align:center;
- line-height:2;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhInactive,
-#searchResults .gsc-cursor-page {
- text-decoration:none;
- color:#258AAF;
- border: solid 1px #DADADA;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhInactive:hover,
-#searchResults .gsc-cursor-page:hover {
- border-color: #DBDBDB;
- background-color: #F3F3F3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#ECECEC));
- background-image: -webkit-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -moz-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -ms-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -o-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: linear-gradient(top, #F9F9F9, #ECECEC);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhActive,
-#searchResults .gsc-tabHeader.gsc-tabhActive:hover,
-#searchResults .gsc-cursor-page.gsc-cursor-current-page,
-#searchResults .gsc-cursor-page.gsc-cursor-current-page:hover {
- color:#fff;
- background-color: #09C;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2FADDB), to(#09C));
- background-image: -webkit-linear-gradient(top, #2FADDB, #09C);
- background-image: -moz-linear-gradient(top, #2FADDB, #09C);
- background-image: -ms-linear-gradient(top, #2FADDB, #09C);
- background-image: -o-linear-gradient(top, #2FADDB, #09C);
- background-image: linear-gradient(top, #2FADDB, #09C);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990AB;
- z-index:100;
-}
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-/*********** PREVIOUSLY dac-styles.css ***************/
-
-
-
-
-
-::-webkit-selection,
-::-moz-selection,
-::selection {
- background-color: #0099cc;
- color: #fff; }
-
-#header {
- border-bottom:0;
-}
-
-#header .wrap {
- max-width:940px;
- height:41px;
- border-bottom:1px solid;
- border-color: #ccc;
- position:relative;
-}
-
-.about #header .wrap {
- border-color: #9933CC;
-}
-
-.design #header .wrap {
- border-color: #33b5e5;
-}
-
-.develop #header .wrap {
- border-color: #F80;
-}
-
-.distribute #header .wrap {
- border-color: #9C0;
-}
-
-.logo a {
- width:123px;
- float:left;
-}
-
-#header .logo {
- margin-top: -6px;
- margin-left: 0px;
- margin-bottom:0px;
- width: 160px;
- padding-right:10px;
-}
-
-.search {
- height:25px;
- margin-top: -3px;
- margin-bottom: 0px;
-}
-
-
-
-/* Quicknav */
-.btn-quicknav {
- width:20px;
- height:28px;
- float:left;
- margin-left:6px;
- padding-right:10px;
- position:relative;
- cursor:pointer;
- border-right:1px solid #CCC;
-}
-
-.btn-quicknav a {
- zoom:1;
- position:absolute;
- top:13px;
- left:5px;
- display:block;
- text-indent:-9999em;
- width:10px;
- height:5px;
- background:url(../images/quicknav_arrow.png) no-repeat;
-}
-
-.btn-quicknav a.arrow-active {
- background-position: 0 -5px;
- display:none;
-}
-
-#header-wrap.quicknav a.arrow-inactive {
- display:none;
-}
-
-.btn-quicknav.active a.arrow-active {
- display:block;
-}
-
-.nav-x li {
- display:block;
- float:left;
- margin-right:45px;
- -webkit-transition: all 0.25s linear;
- -moz-transition: all 0.25s linear;
- -ms-transition: all 0.25s linear;
- -o-transition: all 0.25s linear;
- transition: all 0.25s linear;
-}
-
-#header-wrap.quicknav .nav-x li {
- min-width:160px;
- margin-right:20px;
-}
-
-#header-wrap.quicknav li.last {
- margin-right:0px;
-}
-
-#quicknav {
- float:none;
- clear:both;
- margin-left:180px;
- margin-top:-30px;
- display:none;
- overflow:hidden;
-}
-
-#header-wrap.quicknav #quicknav {
-
-}
-
-#quicknav ul {
- margin:10px 0;
- padding:0;
-}
-
-#quicknav ul li.design {
- border-top:1px solid #33b5e5;
-}
-
-#quicknav ul li.develop {
- border-top:1px solid #FF8800;
-}
-
-#quicknav ul li.distribute {
- border-top:1px solid #99cc00;
-}
-
-#quicknav ul li {
- display:block;
- float:left;
- margin:0 20px 0 0;
- min-width:140px;
-}
-
-#quicknav ul li.last {
- margin-right:0px;
-}
-
-#quicknav ul li ul li {
- float:none;
-}
-
-#quicknav ul li ul li a {
- color:#222;
-}
-
-#quicknav ul li li ul,
-#quicknav ul li li ul li {
- margin:0;
-}
-
-#quicknav ul li li ul li:before {
- content:"\21B3";
-}
-
-#header-wrap {
- -webkit-transition: all 0.25s ease-out;
- -moz-transition: all 0.25s ease-out;
- -ms-transition: all 0.25s ease-out;
- -o-transition: all 0.25s ease-out;
- transition: all 0.25s ease-out;
-
-}
-
-#header-wrap.quicknav {
- height:170px;
-
-}
-
-/* SEARCH AND MORE */
-.search {
- position: absolute;
- width: 50px;
- height:28px;
- display: block;
- margin-top:-3px;
- margin-bottom:7px;
- overflow:hidden;
- z-index:100;
- right:54px;
- -webkit-transition: width 0.4s ease;
- -moz-transition: width 0.4s ease;
- -o-transition: width 0.4s ease;
- transition: width 0.4s ease;
-}
-
-.search #search-btn {
- width:50px;
- height:28px;
- background:url(../images/icon_search.png) no-repeat;
- float:left;
-}
-
-.search-inner {
- width:245px;
-}
-
-.search:hover, .search.active {
- width:245px;
-}
-
-.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a2a2a2
-}
-
-.search .bottom {
- width: 214px;
- height: 1px;
- top: 24px;
- left: 0
-}
-
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-
-.search .left {
- top: 22px;
- left: 56px;
- background-color:#CCC;
-}
-
-.search .right {
- top: 22px;
- left: 238px;
- background-color:#CCC;
-}
-
-.search form {
- margin-top: 2px;
- width: 162px;
- float:left;
-}
-
-.search form input {
- color: #2f2f2f;
- font-size: 0.95em;
- width: 178px;
- border: none;
- margin-left: 6px;
- z-index: 1500;
- position: relative;
- background-color: transparent;
- border-bottom:1px solid #CCC;
- padding:0 0 0 4px;
- outline:none;
- height:24px;
-}
-
-.search:hover form input {
- border-bottom:1px solid #33B5E5;
-}
-
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-
-.search:hover #search-btn {
- background-position: 0 -28px
-}
-
-.search form input:focus {
- color: #222;
- font-weight: bold
-}
-
-.moremenu {
- float: right;
- position: relative;
- width: 50px;
- height:28px;
- display: block;
- margin-top:-3px;
- margin-bottom:7px;
- overflow:hidden;
- -webkit-transition: width 0.25s ease;
- -moz-transition: width 0.25s ease;
- -o-transition: width 0.25s ease;
- transition: width 0.25s ease;
-}
-
-.moremenu #more-btn {
- width:40px;
- height:28px;
- background:url(../images/icon_more.png) no-repeat;
- border-left:1px solid #CCC;
- float:left;
- cursor:pointer;
-}
-
-.moremenu:hover #more-btn {
- background-position:0 -28px;
-}
-
-.morehover {
- position:absolute;
- right:6px;
- top:-9px;
- width:40px;
- height:35px;
- z-index:99;
- overflow:hidden;
-
- -webkit-opacity:0;
- -moz-opacity:0;
- -o-opacity:0;
- opacity:0;
-
- -webkit-transform-origin:100% 0%;
- -moz-transform-origin:100% 0%;
- -o-transform-origin:100% 0%;
- transform-origin:100% 0%;
-
- -webkit-transition-property: -webkit-opacity;
- -webkit-transition-duration: .25s;
- -webkit-transition-timing-function:ease;
-
- -moz-transition-property: -webkit-opacity;
- -moz-transition-duration: .25s;
- -moz-transition-timing-function:ease;
-
- -o-transition-property: -webkit-opacity;
- -o-transition-duration: .25s;
- -o-transition-timing-function:ease;
-
- -transition-property: -webkit-opacity;
- -transition-duration: .25s;
- -transition-timing-function:ease;
-}
-
-.morehover:hover {
- opacity:1;
- height:385px;
- width:268px;
- -webkit-transition-property:height, -webkit-opacity;
-}
-
-.morehover .top {
- width:268px;
- height:39px;
- background:url(../images/more_top.png) no-repeat;
-}
-
-.morehover .mid {
- width:228px;
- background:url(../images/more_mid.png) repeat-y;
- padding:10px 20px 0 20px;
-}
-
-.morehover .mid .header {
- border-bottom:1px solid #ccc;
- font-weight:bold;
-}
-
-.morehover .bottom {
- width:268px;
- height:6px;
- background:url(../images/more_bottom.png) no-repeat;
-}
-
-.morehover ul {
- margin:10px 10px 20px 0;
-}
-
-.morehover ul li {
- list-style:none;
-}
-
-.morehover ul li.active a,
-.morehover ul li.active a:hover {
- color:#222 !important;
-}
-
-.morehover ul li.active img {
- margin-right:4px;
-}
-
-
-
-
-/* MARQUEE */
-.slideshow-container {
- width:100%;
- overflow:hidden;
- position:relative;
-}
-.slideshow-container .slideshow-prev {
- position:absolute;
- top:50%;
- left:0px;
- margin-top:-36px;
- z-index:99;
-}
-.slideshow-container .slideshow-next {
- position:absolute;
- top:50%;
- margin-top:-36px;
- z-index:99;
- right:0px;
-}
-
-.slideshow-container .pagination {
- position:absolute;
- bottom:20px;
- width:100%;
- text-align:center;
- z-index:99;
-}
-.slideshow-container .pagination ul {
- margin:0;
-}
-.slideshow-container .pagination ul li{
- display: inline-block;
- width:12px;
- height:12px;
- text-indent:-8000px;
- list-style:none;
- margin: 0 2px;
- border-radius:6px;
- background-color:#ccc;
- cursor:pointer;
- -webkit-transition:color .5s ease-in;
- -moz-transition:color .5s ease-in;
- -o-transition:color .5s ease-in;
- transition:color .5s ease-in;
-}
-.slideshow-container .pagination ul li:hover {
- background-color:#999;
-}
-.slideshow-container .pagination ul li.active {
- background-color:#33b5e5;
-}
-.slideshow-container .pagination ul li.active:hover {
- background-color:#33b5e5;
-}
-.slideshow-container ul li {
- display:inline;
- list-style:none;
-}
-
-
-
-
-a.download-sdk {
- float:right;
- margin:-10px 0;
- height:30px;
- padding-top:4px;
- padding-bottom:0px;
-}
-
-#nav-x {
- padding-top: 14px;
-}
-
-#nav-x .wrap {
- min-height:34px;
-}
-
-#nav-x .wrap,
-#searchResults.wrap {
- max-width:940px;
- border-bottom:1px solid #CCC;
-}
-
-#searchResults.wrap #leftSearchControl {
- min-height:700px
-}
-.nav-x {
- margin-left:0;
- margin-bottom:0;
-}
-
-
-
-
-
-
-
-
-
-
-/*
- * CSS Styles that are needed by jScrollPane for it to operate correctly.
- */
-
-.jspContainer {
- overflow: hidden;
- position: relative;
-}
-
-.jspPane {
- position: absolute;
- overflow: hidden;
- width:auto !important; /* to avoid cut-off api names in reference in horiz scroll */
-}
-
-.jspVerticalBar {
- position: absolute;
- top: 0;
- right: 0;
- width: 4px;
- height: 100%;
- background: #f5f5f5;
-}
-
-.jspHorizontalBar {
- position: absolute;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 4px;
- background: #f5f5f5;
-}
-
-.jspVerticalBar *,
-.jspHorizontalBar * {
- margin: 0;
- padding: 0;
-}
-.jspCap {
- display: block;
-}
-
-.jspVerticalBar .jspCap {
- height: 4px;
-}
-
-.jspHorizontalBar .jspCap {
- width: 0;
- height: 100%;
-}
-
-.jspHorizontalBar .jspCap {
- float: left;
-}
-
-.jspTrack {
- position: relative;
-}
-
-.jspDrag {
- background: #bbb;
- position: relative;
- top: 0;
- left: 0;
- cursor: pointer;
-}
-
-.jspDrag:hover,
-.jspDrag:active {
- border-color: #09c;
- background-color: #4cadcb;
- background-image: -webkit-gradient(linear, left top, right top, from(#5dbcd9), to(#4cadcb));
- background-image: -webkit-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -moz-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -ms-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: -o-linear-gradient(left, #5dbcd9, #4cadcb);
- background-image: linear-gradient(left, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9', EndColorStr='#4cadcb');
-}
-
-.jspHorizontalBar .jspTrack,
-.jspHorizontalBar .jspDrag {
- float: left;
- height: 100%;
-}
-
-.jspArrow {
- background: #999;
- text-indent: -20000px;
- display: block;
- cursor: pointer;
-}
-
-.jspArrow.jspDisabled {
- cursor: default;
- background: #ccc;
-}
-
-.jspVerticalBar .jspArrow {
- height: 16px;
-}
-
-.jspHorizontalBar .jspArrow {
- width: 16px;
- float: left;
- height: 100%;
-}
-
-.jspVerticalBar .jspArrow:focus {
- outline: none;
-}
-
-.jspCorner {
- float: left;
- height: 100%;
-}
-
-/* Yuk! CSS Hack for IE6 3 pixel bug :( */
-* html .jspCorner {
- margin: 0 -3px 0 0;
-}
-/******* end of jscrollpane *********/
-
-
-
-
-
-/************ DEVELOP HOMEPAGE ******************/
-
-/* Slideshow */
-.slideshow-develop {
- height: 300px;
- width: 940px;
- position: relative;
- overflow:hidden;
-}
-.slideshow-develop .frame {
- width: 940px;
- height: 300px;
-}
-.slideshow-develop img.play {
- max-width:350px;
- max-height:240px;
- margin:20px 0 0 90px;
- -webkit-transform: perspective(800px ) rotateY( 35deg );
- box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: -16px 20px 40px rgba(0, 0, 0, 0.3);
-}
-.slideshow-develop img.play.no-shadow {
- box-shadow: none;
- -moz-box-shadow: none;
- -webkit-box-shadow: none;
-}
-.slideshow-develop img.play.no-transform {
- -webkit-transform: none;
-}
-.slideshow-develop a.slideshow-next {
- background: url(../images/arrow-right-develop.png);
-}
-.slideshow-develop a.slideshow-prev {
- background: url(../images/arrow-left-develop.png);
-}
-.slideshow-develop .content-right {
- float: left;
-}
-.slideshow-develop .content-right p.title-intro {
- position:absolute;
- margin:0;
-}
-.slideshow-develop .content-right h2 {
- padding:0;
- margin-bottom:10px;
- border:none;
-}
-.slideshow-develop .item {
- height: 300px;
- width: 940px;
-}
-.slideshow-develop .pagination ul li.active {
- background-color: #F80;
-}
-.slideshow-develop .pagination ul li.active:hover {
- background-color: #F80;
-}
-
-/* Feeds */
-.feed ul {
- margin: 0;
-}
-.feed .feed-nav {
- height: 25px;
- border-bottom: 1px solid #CCC;
-}
-.feed .feed-nav li {
- list-style: none;
- float: left;
- height: 21px; /* +4px bottom border = 25px; same as .feed-nav */
- margin-right: 25px;
- cursor: pointer;
-}
-.feed .feed-nav li.active {
- color: #000;
- border-bottom: 4px solid #F80;
-}
-.feed .feed-container {
- overflow: hidden;
- width: 460px;
-}
-.feed .feed-container .feed-frame {
- width: 1000px;
-}
-.feed .feed-container .feed-frame ul {
- float: left;
- width:460px;
-}
-.feed .feed-container .feed-frame ul ul {
- float: none;
- margin:10px 0 0 30px;
-}
-.feed .feed-container .feed-frame li {
- list-style: none;
- margin: 20px 0 20px 0;
- width: 460px;
- height:93px;
-}
-.feed .feed-container .feed-frame li.playlist {
- height:auto;
-}
-.feed .feed-container .feed-frame li.playlist a {
- height:93px;
- display:block;
-}
-.feed .feed-container .feed-frame li.more {
- height:20px;
- margin:10px 0 5px 5px;
-}
-.feed .feed-container .feed-frame li.more a {
- height:inherit;
-}
-.feed .feed-container .feed-frame li.playlist-video {
- list-style: none;
- margin: 0;
- width: 460px;
- height:55px;
- font-size:12px;
-}
-.feed .feed-container .feed-frame li.playlist-video a {
- height:45px;
- padding:5px;
-}
-.feed .feed-container .feed-frame li.playlist-video h5 {
- font-size:12px;
- line-height:13px;
- margin:0;
-}
-.feed .feed-container .feed-frame li.playlist-video p {
- margin:5px 0 0;
- line-height:15px;
-}
-.feed-container .feed-frame div.feed-image {
- float: left;
- border: 1px solid #999;
- margin:0 20px 0 0;
- width:122px;
- height:92px;
- background:url('../images/blog-default.png') no-repeat 0 0;
- background-size:180px;
-}
-#jd-content .feed .feed-container .feed-frame li img {
- float: left;
- border: 1px solid #999;
- margin:0 20px 0 0;
- width:122px;
- height:92px;
-}
-#jd-content .feed .feed-container .feed-frame li.playlist-video img {
- width:inherit;
- height:inherit;
-}
-
-.feed .feed-container .feed-frame li a,
-.feed .feed-container .feed-frame li a:active {
- color:#555 !important;
-}
-
-.feed .feed-container .feed-frame li a:hover,
-.feed .feed-container .feed-frame li a:hover * {
- color:#7AA1B0 !important;
-}
-
-/* Video player */
-#player-wrapper {
- display:none;
- margin: -1px auto 0;
- position: relative;
- width: 940px;
- height: 0px;
-}
-#player-frame {
- background: #EFEFEF;
- border: 1px solid #CCC;
- padding: 0px 207px;
- z-index: 10; /* stay above marque, but below search suggestions */
- width: 525px;
- height: 330px;
- position: relative;
-}
-
-
-
-/************ DISTRIBUTE HOMEPAGE ***************/
-
-.marquee {
- width: 760px;
-}
-.marquee .main-img {
- float: left;
- margin-top: 20px;
- width: 490px;
-}
-.marquee .copy {
- width: 270px;
- float: left;
- margin-top: 30px;
-}
-.distribute-features {
- margin: 0;
-}
-.distribute-features ul {
- margin: 0;
-}
-.distribute-features ul li {
- list-style: none;
- float: left;
- border-top: 1px solid #9C0;
- width: 220px;
- margin-right: 50px;
-}
-.distribute-features ul li.last {
- margin-right: 0px;
-}
-
-
-/************ DEVELOP TOPIC CONTAINERS ************/
-
-.landing-banner,
-.landing-docs {
- margin:20px 0 0;
-}
-.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child,
-.landing-docs .col-12 {
- margin-left:0;
- min-height:280px;
-}
-.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child,
-.landing-docs .col-12 {
- margin-right:0;
-}
-
-.landing-banner h1 {
- margin-top:0;
-}
-.landing-docs {
- clear:left;
-}
-.landing-docs h3 {
- font-size:14px;
- line-height:21px;
- color:#555;
- text-transform:uppercase;
- border-bottom:1px solid #CCC;
- margin:0 0 20px;
-}
-.landing-docs a {
- color:#333 !important;
-}
-.landing-docs a:hover,
-.landing-docs a:hover * {
- color:#7AA1B0 !important
-}
-
-.plusone {
- float:right;
-}
-
-
-
-/************* HOME/LANDING PAGE *****************/
-
-.slideshow-home {
- height: 500px;
- width: 940px;
- border-bottom: 1px solid #CCC;
- position: relative;
- margin: 0;
-}
-.slideshow-home .frame {
- width: 940px;
- height: 500px;
-}
-.slideshow-home .content-left {
- float: left;
- text-align: center;
- vertical-align: center;
- margin: 0 0 0 35px;
-}
-.slideshow-home .content-right {
- margin: 80px 0 0 0;
-}
-.slideshow-home .content-right p {
- margin-bottom: 10px;
-}
-.slideshow-home .content-right p:last-child {
- margin-top: 15px;
-}
-.slideshow-home .content-right h1 {
- padding:0;
-}
-.slideshow-home .item {
- height: 500px;
- width: 940px;
-}
-.home-sections {
- padding: 30px 20px 20px;
- margin: 20px 0;
- background: -webkit-linear-gradient(top, #F6F6F6,#F9F9F9);
-}
-.home-sections ul {
- margin: 0;
-}
-.home-sections ul li {
- float: left;
- display: block;
- list-style: none;
- width: 170px;
- height: 35px;
- border: 1px solid #ccc;
- background: white;
- margin-right: 10px;
- border-radius: 1px;
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- box-shadow: 1px 1px 5px #EEE;
- -webkit-box-shadow: 1px 1px 5px #EEE;
- -moz-box-shadow: 1px 1px 5px #EEE;
- background: white;
-}
-.home-sections ul li:hover {
- background: #F9F9F9;
- border: 1px solid #CCC;
-}
-.home-sections ul li a,
-.home-sections ul li a:hover {
- font-weight: bold;
- margin-top: 8px;
- line-height: 18px;
- float: left;
- width: 100%;
- text-align: center;
- color: #09c !important;
-}
-.home-sections ul li a {
- font-weight: bold;
- margin-top: 8px;
- line-height: 18px;
- float: left;
- width:100%;
- text-align:center;
-}
-.home-sections ul li img {
- float: left;
- margin: -8px 0 0 10px;
-}
-.home-sections ul li.last {
- margin-right: 0px;
-}
-.fullpage #footer {
- margin-top: -40px;
-}
diff --git a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html b/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
deleted file mode 100644
index 04b9aa5..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/deprecated-list.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Deprecated List
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Deprecated List";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-<B>Deprecated API</B></H2>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-<B>Contents</B><UL>
-</UL>
-
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/help-doc.html b/docs/html/guide/google/gcm/server-javadoc/help-doc.html
deleted file mode 100644
index c479cff..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/help-doc.html
+++ /dev/null
@@ -1,209 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-API Help
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="API Help";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-How This API Document Is Organized</H1>
-</CENTER>
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
-Package</H3>
-<BLOCKQUOTE>
-
-<P>
-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
-<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
-</BLOCKQUOTE>
-<H3>
-Class/Interface</H3>
-<BLOCKQUOTE>
-
-<P>
-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
-<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
-<P>
-<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
-<P>
-<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Annotation Type</H3>
-<BLOCKQUOTE>
-
-<P>
-Each annotation type has its own separate page with the following sections:<UL>
-<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
-</BLOCKQUOTE>
-</BLOCKQUOTE>
-<H3>
-Enum</H3>
-<BLOCKQUOTE>
-
-<P>
-Each enum has its own separate page with the following sections:<UL>
-<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
-</BLOCKQUOTE>
-<H3>
-Tree (Class Hierarchy)</H3>
-<BLOCKQUOTE>
-There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
-<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
-</BLOCKQUOTE>
-<H3>
-Deprecated API</H3>
-<BLOCKQUOTE>
-The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
-<H3>
-Index</H3>
-<BLOCKQUOTE>
-The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
-<H3>
-Prev/Next</H3>
-These links take you to the next or previous class, interface, package, or related page.<H3>
-Frames/No Frames</H3>
-These links show and hide the HTML frames. All pages are available with or without frames.
-<P>
-<H3>
-Serialized Form</H3>
-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
-<P>
-<H3>
-Constant Field Values</H3>
-The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
-<P>
-<FONT SIZE="-1">
-<EM>
-This help file applies to API documentation generated using the standard doclet.</EM>
-</FONT>
-<BR>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/index-all.html b/docs/html/guide/google/gcm/server-javadoc/index-all.html
deleted file mode 100644
index 97aa300..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/index-all.html
+++ /dev/null
@@ -1,438 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Index
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="./default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Index";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A> <HR>
-<A NAME="_A_"><!-- --></A><H2>
-<B>A</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#addData(java.lang.String, java.lang.String)"><B>addData(String, String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>Adds a key/value pair to the payload data.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#addParameter(java.lang.StringBuilder, java.lang.String, java.lang.String)"><B>addParameter(StringBuilder, String, String)</B></A> -
-Static method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Adds a new parameter to the HTTP POST body.
-</DL>
-<HR>
-<A NAME="_B_"><!-- --></A><H2>
-<B>B</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#BACKOFF_INITIAL_DELAY"><B>BACKOFF_INITIAL_DELAY</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Initial delay before first retry, without jitter.
-<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#build()"><B>build()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_C_"><!-- --></A><H2>
-<B>C</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#collapseKey(java.lang.String)"><B>collapseKey(String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>Sets the collapseKey property.
-<DT><A HREF="./com/google/android/gcm/server/package-summary.html"><B>com.google.android.gcm.server</B></A> - package com.google.android.gcm.server<DD>&nbsp;<DT><A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server"><B>Constants</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>Constants used on GCM service communication.</DL>
-<HR>
-<A NAME="_D_"><!-- --></A><H2>
-<B>D</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#delayWhileIdle(boolean)"><B>delayWhileIdle(boolean)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>Sets the delayWhileIdle property (default value is false).
-</DL>
-<HR>
-<A NAME="_E_"><!-- --></A><H2>
-<B>E</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_DEVICE_QUOTA_EXCEEDED"><B>ERROR_DEVICE_QUOTA_EXCEEDED</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Too many messages sent by the sender to a specific device.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_INTERNAL_SERVER_ERROR"><B>ERROR_INTERNAL_SERVER_ERROR</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>A particular message could not be sent because the GCM servers encountered
- an error.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_INVALID_REGISTRATION"><B>ERROR_INVALID_REGISTRATION</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Bad registration_id.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_INVALID_TTL"><B>ERROR_INVALID_TTL</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Time to Live value passed is less than zero or more than maximum.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_MESSAGE_TOO_BIG"><B>ERROR_MESSAGE_TOO_BIG</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>The payload of the message is too big, see the limitations.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_MISMATCH_SENDER_ID"><B>ERROR_MISMATCH_SENDER_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>The sender_id contained in the registration_id does not match the
- sender_id used to register with the GCM servers.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_MISSING_COLLAPSE_KEY"><B>ERROR_MISSING_COLLAPSE_KEY</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Collapse key is required.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_MISSING_REGISTRATION"><B>ERROR_MISSING_REGISTRATION</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Missing registration_id.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_NOT_REGISTERED"><B>ERROR_NOT_REGISTERED</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>The user has uninstalled the application or turned off notifications.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_QUOTA_EXCEEDED"><B>ERROR_QUOTA_EXCEEDED</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Too many messages sent by the sender.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#ERROR_UNAVAILABLE"><B>ERROR_UNAVAILABLE</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>A particular message could not be sent because the GCM servers were not
- available.
-</DL>
-<HR>
-<A NAME="_G_"><!-- --></A><H2>
-<B>G</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#GCM_SEND_ENDPOINT"><B>GCM_SEND_ENDPOINT</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Endpoint for sending messages.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getCanonicalIds()"><B>getCanonicalIds()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the number of successful messages that also returned a canonical
- registration id.
-<DT><A HREF="./com/google/android/gcm/server/Result.html#getCanonicalRegistrationId()"><B>getCanonicalRegistrationId()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>
-<DD>Gets the canonical registration id, if any.
-<DT><A HREF="./com/google/android/gcm/server/Message.html#getCollapseKey()"><B>getCollapseKey()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<DD>Gets the collapse key.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#getConnection(java.lang.String)"><B>getConnection(String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Gets an <CODE>HttpURLConnection</CODE> given an URL.
-<DT><A HREF="./com/google/android/gcm/server/Message.html#getData()"><B>getData()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<DD>Gets the payload data, which is immutable.
-<DT><A HREF="./com/google/android/gcm/server/InvalidRequestException.html#getDescription()"><B>getDescription()</B></A> -
-Method in exception com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A>
-<DD>Gets the error description.
-<DT><A HREF="./com/google/android/gcm/server/Result.html#getErrorCodeName()"><B>getErrorCodeName()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>
-<DD>Gets the error code, if any.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getFailure()"><B>getFailure()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the number of failed messages.
-<DT><A HREF="./com/google/android/gcm/server/InvalidRequestException.html#getHttpStatusCode()"><B>getHttpStatusCode()</B></A> -
-Method in exception com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A>
-<DD>Gets the HTTP Status Code.
-<DT><A HREF="./com/google/android/gcm/server/Result.html#getMessageId()"><B>getMessageId()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>
-<DD>Gets the message id, if any.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getMulticastId()"><B>getMulticastId()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the multicast id.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getResults()"><B>getResults()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the results of each individual message, which is immutable.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getRetryMulticastIds()"><B>getRetryMulticastIds()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets additional ids if more than one multicast message was sent.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#getString(java.io.InputStream)"><B>getString(InputStream)</B></A> -
-Static method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Convenience method to convert an InputStream to a String.
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getSuccess()"><B>getSuccess()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the number of successful messages.
-<DT><A HREF="./com/google/android/gcm/server/Message.html#getTimeToLive()"><B>getTimeToLive()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<DD>Gets the time to live (in seconds).
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#getTotal()"><B>getTotal()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>Gets the total number of messages sent, regardless of the status.
-</DL>
-<HR>
-<A NAME="_I_"><!-- --></A><H2>
-<B>I</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>InvalidRequestException</B></A> - Exception in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>Exception thrown when GCM returned an error due to an invalid request.<DT><A HREF="./com/google/android/gcm/server/InvalidRequestException.html#InvalidRequestException(int)"><B>InvalidRequestException(int)</B></A> -
-Constructor for exception com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/InvalidRequestException.html#InvalidRequestException(int, java.lang.String)"><B>InvalidRequestException(int, String)</B></A> -
-Constructor for exception com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">InvalidRequestException</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/Message.html#isDelayWhileIdle()"><B>isDelayWhileIdle()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<DD>Gets the delayWhileIdle flag.
-</DL>
-<HR>
-<A NAME="_J_"><!-- --></A><H2>
-<B>J</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_CANONICAL_IDS"><B>JSON_CANONICAL_IDS</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the number of messages with a canonical
- registration id.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_ERROR"><B>JSON_ERROR</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the error field of an individual request.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_FAILURE"><B>JSON_FAILURE</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the number of failed messages.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_MESSAGE_ID"><B>JSON_MESSAGE_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field sent by GCM when a message was successfully sent.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_MULTICAST_ID"><B>JSON_MULTICAST_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the id of the multicast request.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_PAYLOAD"><B>JSON_PAYLOAD</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the payload data.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_REGISTRATION_IDS"><B>JSON_REGISTRATION_IDS</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the registration ids.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_RESULTS"><B>JSON_RESULTS</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the result of each individual request.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#JSON_SUCCESS"><B>JSON_SUCCESS</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>JSON-only field representing the number of successful messages.
-</DL>
-<HR>
-<A NAME="_L_"><!-- --></A><H2>
-<B>L</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#logger"><B>logger</B></A> -
-Variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_M_"><!-- --></A><H2>
-<B>M</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#MAX_BACKOFF_DELAY"><B>MAX_BACKOFF_DELAY</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Maximum delay before a retry.
-<DT><A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>Message</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>GCM message.<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>Message.Builder</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>&nbsp;<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#Message.Builder()"><B>Message.Builder()</B></A> -
-Constructor for class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>MulticastResult</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>Result of a GCM multicast message request .</DL>
-<HR>
-<A NAME="_N_"><!-- --></A><H2>
-<B>N</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#newBody(java.lang.String, java.lang.String)"><B>newBody(String, String)</B></A> -
-Static method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Creates a <CODE>StringBuilder</CODE> to be used as the body of an HTTP POST.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#newKeyValues(java.lang.String, java.lang.String)"><B>newKeyValues(String, String)</B></A> -
-Static method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Creates a map with just one key-value pair.
-</DL>
-<HR>
-<A NAME="_P_"><!-- --></A><H2>
-<B>P</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#PARAM_COLLAPSE_KEY"><B>PARAM_COLLAPSE_KEY</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>HTTP parameter for collapse key.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#PARAM_DELAY_WHILE_IDLE"><B>PARAM_DELAY_WHILE_IDLE</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>HTTP parameter for delaying the message delivery if the device is idle.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#PARAM_PAYLOAD_PREFIX"><B>PARAM_PAYLOAD_PREFIX</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Prefix to HTTP parameter used to pass key-values in the message payload.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#PARAM_REGISTRATION_ID"><B>PARAM_REGISTRATION_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>HTTP parameter for registration id.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#PARAM_TIME_TO_LIVE"><B>PARAM_TIME_TO_LIVE</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Prefix to HTTP parameter used to set the message time-to-live.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#post(java.lang.String, java.lang.String)"><B>post(String, String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Make an HTTP post to a given URL.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#post(java.lang.String, java.lang.String, java.lang.String)"><B>post(String, String, String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_R_"><!-- --></A><H2>
-<B>R</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#random"><B>random</B></A> -
-Variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>Result</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>Result of a GCM message request that returned HTTP status code 200.</DL>
-<HR>
-<A NAME="_S_"><!-- --></A><H2>
-<B>S</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.lang.String, int)"><B>send(Message, String, int)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Sends a message to one device, retrying in case of unavailability.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#send(com.google.android.gcm.server.Message, java.util.List, int)"><B>send(Message, List&lt;String&gt;, int)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Sends a message to many devices, retrying in case of unavailability.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server"><B>Sender</B></A> - Class in <A HREF="./com/google/android/gcm/server/package-summary.html">com.google.android.gcm.server</A><DD>Helper class to send messages to the GCM service using an API Key.<DT><A HREF="./com/google/android/gcm/server/Sender.html#Sender(java.lang.String)"><B>Sender(String)</B></A> -
-Constructor for class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Default constructor.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#sendNoRetry(com.google.android.gcm.server.Message, java.lang.String)"><B>sendNoRetry(Message, String)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Sends a message without retrying in case of service unavailability.
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#sendNoRetry(com.google.android.gcm.server.Message, java.util.List)"><B>sendNoRetry(Message, List&lt;String&gt;)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>Sends a message without retrying in case of service unavailability.
-</DL>
-<HR>
-<A NAME="_T_"><!-- --></A><H2>
-<B>T</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Message.Builder.html#timeToLive(int)"><B>timeToLive(int)</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server">Message.Builder</A>
-<DD>Sets the time to live, in seconds.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#TOKEN_CANONICAL_REG_ID"><B>TOKEN_CANONICAL_REG_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Token returned by GCM when the requested registration id has a canonical
- value.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#TOKEN_ERROR"><B>TOKEN_ERROR</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Token returned by GCM when there was an error sending a message.
-<DT><A HREF="./com/google/android/gcm/server/Constants.html#TOKEN_MESSAGE_ID"><B>TOKEN_MESSAGE_ID</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server">Constants</A>
-<DD>Token returned by GCM when a message was successfully sent.
-<DT><A HREF="./com/google/android/gcm/server/Message.html#toString()"><B>toString()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">Message</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/MulticastResult.html#toString()"><B>toString()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">MulticastResult</A>
-<DD>&nbsp;
-<DT><A HREF="./com/google/android/gcm/server/Result.html#toString()"><B>toString()</B></A> -
-Method in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">Result</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A NAME="_U_"><!-- --></A><H2>
-<B>U</B></H2>
-<DL>
-<DT><A HREF="./com/google/android/gcm/server/Sender.html#UTF8"><B>UTF8</B></A> -
-Static variable in class com.google.android.gcm.server.<A HREF="./com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server">Sender</A>
-<DD>&nbsp;
-</DL>
-<HR>
-<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_E_">E</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_J_">J</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_N_">N</A> <A HREF="#_P_">P</A> <A HREF="#_R_">R</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_U_">U</A>
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/index.html b/docs/html/guide/google/gcm/server-javadoc/index.html
deleted file mode 100644
index d3c3821..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc on Wed Aug 29 14:55:34 PDT 2012-->
-<TITLE>
-Generated Documentation (Untitled)
-</TITLE>
-<SCRIPT type="text/javascript">
- targetPage = "" + window.location.search;
- if (targetPage != "" && targetPage != "undefined")
- targetPage = targetPage.substring(1);
- if (targetPage.indexOf(":") != -1)
- targetPage = "undefined";
- function loadFrames() {
- if (targetPage != "" && targetPage != "undefined")
- top.classFrame.location = top.targetPage;
- }
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-</HEAD>
-<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
-<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
-<FRAME src="com/google/android/gcm/server/package-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
-<NOFRAMES>
-<H2>
-Frame Alert</H2>
-
-<P>
-This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-<BR>
-Link to<A HREF="com/google/android/gcm/server/package-summary.html">Non-frame version.</A>
-</NOFRAMES>
-</FRAMESET>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html b/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
deleted file mode 100644
index c9afea6..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/overview-tree.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Class Hierarchy
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Class Hierarchy";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H2>
-Hierarchy For All Packages</H2>
-</CENTER>
-<DL>
-<DT><B>Package Hierarchies:</B><DD><A HREF="com/google/android/gcm/server/package-tree.html">com.google.android.gcm.server</A></DL>
-<HR>
-<H2>
-Class Hierarchy
-</H2>
-<UL>
-<LI TYPE="circle">java.lang.Object<UL>
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Constants.html" title="class in com.google.android.gcm.server"><B>Constants</B></A><LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server"><B>Message</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Message.Builder.html" title="class in com.google.android.gcm.server"><B>Message.Builder</B></A><LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server"><B>MulticastResult</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server"><B>Result</B></A> (implements java.io.Serializable)
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/Sender.html" title="class in com.google.android.gcm.server"><B>Sender</B></A><LI TYPE="circle">java.lang.Throwable (implements java.io.Serializable)
-<UL>
-<LI TYPE="circle">java.lang.Exception<UL>
-<LI TYPE="circle">java.io.IOException<UL>
-<LI TYPE="circle">com.google.android.gcm.server.<A HREF="com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server"><B>InvalidRequestException</B></A></UL>
-</UL>
-</UL>
-</UL>
-</UL>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/package-list b/docs/html/guide/google/gcm/server-javadoc/package-list
deleted file mode 100644
index 5955cc0..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/package-list
+++ /dev/null
@@ -1 +0,0 @@
-com.google.android.gcm.server
diff --git a/docs/html/guide/google/gcm/server-javadoc/resources/inherit.gif b/docs/html/guide/google/gcm/server-javadoc/resources/inherit.gif
deleted file mode 100644
index c814867..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/resources/inherit.gif
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html b/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
deleted file mode 100644
index ab99e41..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/serialized-form.html
+++ /dev/null
@@ -1,355 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!--NewPage-->
-<HTML>
-<HEAD>
-<!-- Generated by javadoc (build 1.6.0_26) on Wed Aug 29 14:55:34 PDT 2012 -->
-<TITLE>
-Serialized Form
-</TITLE>
-
-<META NAME="date" CONTENT="2012-08-29">
-
-<LINK REL ="stylesheet" TYPE="text/css" HREF="default.css" TITLE="Style">
-
-<SCRIPT type="text/javascript">
-function windowTitle()
-{
- if (location.href.indexOf('is-external=true') == -1) {
- parent.document.title="Serialized Form";
- }
-}
-</SCRIPT>
-<NOSCRIPT>
-</NOSCRIPT>
-
-</HEAD>
-
-<BODY BGCOLOR="white" onload="windowTitle();">
-<HR>
-
-
-<!-- ========= START OF TOP NAVBAR ======= -->
-<A NAME="navbar_top"><!-- --></A>
-<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_top_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_top"></A>
-<!-- ========= END OF TOP NAVBAR ========= -->
-
-<HR>
-<CENTER>
-<H1>
-Serialized Form</H1>
-</CENTER>
-<HR SIZE="4" NOSHADE>
-
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="center"><FONT SIZE="+2">
-<B>Package</B> <B>com.google.android.gcm.server</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="com.google.android.gcm.server.InvalidRequestException"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/android/gcm/server/InvalidRequestException.html" title="class in com.google.android.gcm.server">com.google.android.gcm.server.InvalidRequestException</A> extends java.io.IOException implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TH>
-</TR>
-</TABLE>
-
-<H3>
-status</H3>
-<PRE>
-int <B>status</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-description</H3>
-<PRE>
-java.lang.String <B>description</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.android.gcm.server.Message"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/android/gcm/server/Message.html" title="class in com.google.android.gcm.server">com.google.android.gcm.server.Message</A> extends java.lang.Object implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TH>
-</TR>
-</TABLE>
-
-<H3>
-collapseKey</H3>
-<PRE>
-java.lang.String <B>collapseKey</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-delayWhileIdle</H3>
-<PRE>
-java.lang.Boolean <B>delayWhileIdle</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-timeToLive</H3>
-<PRE>
-java.lang.Integer <B>timeToLive</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-data</H3>
-<PRE>
-java.util.Map&lt;K,V&gt; <B>data</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.android.gcm.server.MulticastResult"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/android/gcm/server/MulticastResult.html" title="class in com.google.android.gcm.server">com.google.android.gcm.server.MulticastResult</A> extends java.lang.Object implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TH>
-</TR>
-</TABLE>
-
-<H3>
-success</H3>
-<PRE>
-int <B>success</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-failure</H3>
-<PRE>
-int <B>failure</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-canonicalIds</H3>
-<PRE>
-int <B>canonicalIds</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-multicastId</H3>
-<PRE>
-long <B>multicastId</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-results</H3>
-<PRE>
-java.util.List&lt;E&gt; <B>results</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-retryMulticastIds</H3>
-<PRE>
-java.util.List&lt;E&gt; <B>retryMulticastIds</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<P>
-<A NAME="com.google.android.gcm.server.Result"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
-<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
-<B>Class <A HREF="com/google/android/gcm/server/Result.html" title="class in com.google.android.gcm.server">com.google.android.gcm.server.Result</A> extends java.lang.Object implements Serializable</B></FONT></TH>
-</TR>
-</TABLE>
-
-<P>
-<A NAME="serializedForm"><!-- --></A>
-<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
-<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
-<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
-<B>Serialized Fields</B></FONT></TH>
-</TR>
-</TABLE>
-
-<H3>
-messageId</H3>
-<PRE>
-java.lang.String <B>messageId</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-canonicalRegistrationId</H3>
-<PRE>
-java.lang.String <B>canonicalRegistrationId</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-<HR>
-<H3>
-errorCode</H3>
-<PRE>
-java.lang.String <B>errorCode</B></PRE>
-<DL>
-<DL>
-</DL>
-</DL>
-
-<P>
-<HR>
-
-
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<A NAME="navbar_bottom"><!-- --></A>
-<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
-<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
-<TR>
-<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
-<A NAME="navbar_bottom_firstrow"><!-- --></A>
-<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
- <TR ALIGN="center" VALIGN="top">
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="com/google/android/gcm/server/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
- <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
- </TR>
-</TABLE>
-</TD>
-<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
-</EM>
-</TD>
-</TR>
-
-<TR>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
-&nbsp;PREV&nbsp;
-&nbsp;NEXT</FONT></TD>
-<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
- <A HREF="index.html?serialized-form.html" target="_top"><B>FRAMES</B></A> &nbsp;
-&nbsp;<A HREF="serialized-form.html" target="_top"><B>NO FRAMES</B></A> &nbsp;
-&nbsp;<SCRIPT type="text/javascript">
- <!--
- if(window==top) {
- document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
- }
- //-->
-</SCRIPT>
-<NOSCRIPT>
- <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
-</NOSCRIPT>
-
-
-</FONT></TD>
-</TR>
-</TABLE>
-<A NAME="skip-navbar_bottom"></A>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-
-<HR>
-
-</BODY>
-</HTML>
diff --git a/docs/html/guide/google/gcm/server-javadoc/stylesheet.css b/docs/html/guide/google/gcm/server-javadoc/stylesheet.css
deleted file mode 100644
index 6ea9e51..0000000
--- a/docs/html/guide/google/gcm/server-javadoc/stylesheet.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/* Javadoc style sheet */
-
-/* Define colors, fonts and other style attributes here to override the defaults */
-
-/* Page background color */
-body { background-color: #FFFFFF; color:#000000 }
-
-/* Headings */
-h1 { font-size: 145% }
-
-/* Table colors */
-.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
-.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
-.TableRowColor { background: #FFFFFF; color:#000000 } /* White */
-
-/* Font used in left-hand frame lists */
-.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
-
-/* Navigation bar fonts and colors */
-.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
-.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
-.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
-
-.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
-
diff --git a/docs/html/guide/google/index.jd b/docs/html/guide/google/index.jd
deleted file mode 100644
index e1fc581..0000000
--- a/docs/html/guide/google/index.jd
+++ /dev/null
@@ -1,134 +0,0 @@
-page.title=Google Services
-footer.hide=1
-@jd:body
-
-<p>
- Google offers a variety of services that help you build new revenue streams, enhance your app's
- capabilities, manage distribution and payloads, and track usage and installs.
- The sections below highlight some of the services offered by Google and link you to more information about
- how to use them in your Android app.
-</p>
-<h2 id="monetization">
- Monetize your app
-</h2>
-<p>
- There are many ways to monetize your Android app, such as with ad impressions or In-App billing. If you
- choose to charge a price to download your app, Android also provides the ability to check
- for valid application licenses to protect your revenue. Because different apps require
- different strategies, you can pick which ones are best for your app.
-</p>
-<div class="vspace size-1">
- &nbsp;
-</div>
-<div class="layout-content-row">
- <div class="layout-content-col span-4">
- <h4>
- Google AdMob Ads
- </h4>
- <p>
- Generate revenue by displaying ads in your app with multiple ad networks.
- </p><a href="http://www.google.com/ads/admob/index.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- In-App Billing
- </h4>
- <p>
- Engage users by offering features such as new content or virtual goods directly in your app.
- </p><a href="{@docRoot}guide/google/play/billing/index.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- Application Licensing
- </h4>
- <p>Protect your revenue streams and integrate policies for usage into your a
-pp.
- </p><a href="{@docRoot}guide/google/play/licensing/index.html">Learn more &raquo;</a>
- </div>
-</div>
-<h2 id="integration">
- Enhance Your App's Capabilities
-</h2>
-<p>
- Android and Google technologies work together to provide your users with compelling interactions
- with technologies such as Maps and Google+.
-</p>
-<div class="vspace size-1">
- &nbsp;
-</div>
-<div class="layout-content-row">
- <div class="layout-content-col span-4">
- <h4>
- Google Play Services
- </h4><img src="{@docRoot}images/play_dev.png">
- <p>
- Leverage Google products in your app with an easy to use authentication flow for your users.
- </p><a href="{@docRoot}guide/google/play/services.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- Google Cloud Messaging
- </h4><img src="{@docRoot}images/gcm/gcm-logo.png" width="150px" style="padding:9px;">
- <p>
- Notify your apps of important events with messages that are lightweight and battery-saving.
- </p><a href="{@docRoot}guide/google/gcm/index.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- Google Maps
- </h4><img src="{@docRoot}images/google-apis.png">
- <p>
- The Google Maps library for Android brings powerful mapping capabilities to your app.
- </p><a href="https://developers.google.com/android/add-ons/google-apis/index">Learn more
- &raquo;</a>
- </div>
-</div>
-<h2 id="integration">
- Manage App Distribution
-</h2>
-<p>
- Google Play allows you to manage your app distribution with features that let you control which users
- can download your app as well as deliver separate versions of your app based on certain
- characteristics like platform version.
-</p>
-<div class="vspace size-1">
- &nbsp;
-</div>
-<div class="layout-content-row">
- <div class="layout-content-col span-4">
- <h4>
- Filters on Google Play
- </h4>
- <p>
- Make sure your app gets to the right users by filtering on a wide range of characteristics
- such as platform versions and hardware features.
- </p><a href="{@docRoot}guide/google/play/filters.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- Multiple APK Support
- </h4>
- <p>
- Distribute different APKs based on a variety of properties such as platform version, screen
- size, and GLES texture compression support.
- </p><a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Learn more &raquo;</a>
- </div>
- <div class="layout-content-col span-4">
- <h4>
- APK Expansion files
- </h4>
- <p>
- Tap into Google's content delivery services by serving up to 4GB of assets for free. Provide
- users with high-fidelity graphics, media files, or other large assets that are required by
- your app.
- </p><a href="{@docRoot}guide/google/play/expansion-files.html">Learn more &raquo;</a>
- </div>
-</div>
-<h2 id="integration">
- Track Performance with Analytics
-</h2>
-<p>
- Google Analytics let you find out how users find your apps and how they use them. Start
- integrating analytics to measure your app's success.
-</p><a href="https://developers.google.com/analytics/devguides/collection/android/">Learn more
-&raquo;</a>
diff --git a/docs/html/guide/google/play/billing/billing_about.html b/docs/html/guide/google/play/billing/billing_about.html
deleted file mode 100644
index 9f41fa6..0000000
--- a/docs/html/guide/google/play/billing/billing_about.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh"
-content="0;url=http://developer.android.com/guide/google/play/billing/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/google/play/billing/index.html">click
-here</a>.</p>
-</body>
-</html> \ No newline at end of file
diff --git a/docs/html/guide/google/play/billing/billing_admin.jd b/docs/html/guide/google/play/billing/billing_admin.jd
deleted file mode 100755
index cb288a5..0000000
--- a/docs/html/guide/google/play/billing/billing_admin.jd
+++ /dev/null
@@ -1,530 +0,0 @@
-page.title=Administering In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-list-setup">Creating a Product List</a></li>
- <li><a href="#billing-purchase-type">Choosing a Purchase Type</a></li>
- <li><a href="#billing-testing-setup">Setting up Test Accounts</a></li>
- <li><a href="#billing-refunds">Handling Refunds</a></li>
- <li><a href="#billing-support">Where to Get Support</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>In-app billing frees you from processing financial transactions, but you still need to perform a
-few administrative tasks, including setting up and maintaining your product list on the publisher
-site, registering test accounts, and handling refunds when necessary.</p>
-
-<p>You must have a Google Play publisher account to register test accounts. And you must have a
-Google Wallet merchant account to create a product list and issue refunds to your users. If you
-already have a publisher account on Google Play, you can use your existing account. You do not
-need to register for a new account to support in-app billing. If you do not have a publisher
-account, you can register as a Google Play developer and set up a publisher account at the
-Google Play <a href="http://play.google.com/apps/publish">publisher site</a>. If you do not have a
-Google Wallet merchant account, you can register for one at the <a
-href="http://checkout.google.com">Google Wallet site</a>.</p>
-
-<h2 id="billing-list-setup">Creating a Product List</h2>
-
-<p>The Google Play publisher site provides a product list for each of your published
-applications. You can sell an item using Google Play's in-app billing feature only if the item is
-listed on an application's product list. Each application has its own product list; you cannot sell
-items that are listed in another application's product list.</p>
-
-<p>You can access an application's product list by clicking the <strong>In-App Products</strong>
-link that appears under each of the applications that are listed for your publisher account (see
-figure 1). The <strong>In-App Products</strong> link appears only if you have a Google Wallet
-merchant account and an application's manifest includes the <code>com.android.vending.BILLING</code>
-permission.</p>
-
-<img src="{@docRoot}images/billing_product_list_entry.png" height="548" id="figure1" />
-<p class="img-caption">
- <strong>Figure 1.</strong> You can access an application's product list by clicking the
- <strong>In-App Products</strong> link.
-</p>
-
-<p>A product list specifies items you are selling in an application &mdash; in-app products,
-subscriptions, or a combination of both. For each item, the product list contains information such as a product id,
-product description, and price (see figure 2). The product list stores only metadata about the items
-you are selling in your application. It does not store any digital content. You are responsible for
-storing and delivering the digital content that you sell in your applications.</p>
-
-<img src="{@docRoot}images/billing_product_list.png" height="658" id="figure2" />
-<p class="img-caption">
- <strong>Figure 2.</strong> An application's product list.
-</p>
-
-<p>You can create a product list for any published application or any draft application that's been
-uploaded and saved to the Google Play site. However, you must have a Google Wallet merchant
-account and the application's manifest must include the <code>com.android.vending.BILLING</code>
-permission. If an application's manifest does not include this permission, you will be able to edit
-existing items in the product list but you will not be able to add new items to the list. For more
-information about this permission, see
-<a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-permission">Updating Your
-Application's Manifest</a>.</p>
-
-<p>In addition, an application package can have only one product list. If you create a product
-list for an application, and you use the <a
-href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute
-more than one APK for that application, the product list applies to all APK versions that are
-associated with the application listing. You cannot create individual product lists for each APK if
-you are using the multiple APK feature.</p>
-
-<p>You can add items to a product list two ways: you can add items one at a time by using the In-app
-Products UI (see figure 3), or you can add a batch of items by importing the items from a
-comma-separated values (CSV) file (see figure 2). Adding items one at a time is useful if your
-application has only a few in-app items or you are adding only a few items to a
-product list for testing purposes. The CSV file method is useful if your application has a large
-number of in-app items.</p>
-
-<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
-
-<h3 id="billing-form-add">Adding items one at a time to a product list</h3>
-
-<p>To add an item to a product list using the In-app Products UI, follow these steps:</p>
-
-<ol>
- <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
- <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
- <strong>In-app Products</strong>.</li>
- <li>On the In-app Products List page, click <strong>Add in-app product</strong>.</li>
- <li>On the Create New In-app Product page (see figure 3), provide details about the item you are
- selling and then click <strong>Save</strong> or <strong>Publish</strong>.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_list_form.png" height="840" id="figure3" />
-<p class="img-caption">
- <strong>Figure 3.</strong> The Create New In-app Product page lets you add items to an
- application's product list.
-</p>
-
-<p>You must enter the following information for each item in a product list:</p>
-<ul>
- <li><strong>In-app Product ID</strong>
- <p>Product IDs are unique across an application's namespace. A product ID must start with a
- lowercase letter or a number, and must be composed using only lowercase letters (a-z), numbers
- (0-9), underlines (_), and dots (.). The product ID "android.test" is reserved, as are all
- product IDs that start with "android.test."</p>
- <p>In addition, you cannot modify an item's product ID after it is created, and you cannot reuse
- a product ID.</p>
- </li>
- <li><strong>Purchase Type</strong>
- <p>The purchase type can be <strong>Managed per user account</strong>, <strong>Unmanaged</strong>,
- or <strong>Subscription</strong>. You can never change an item's purchase type after you set it. For more
- information, see <a href="#billing-purchase-type">Choosing a purchase type</a> later in this
- document.</p>
- </li>
- <li><strong>Publishing State</strong>
- <p>An item's publishing state can be <strong>Published</strong> or <strong>Unpublished
- </strong>. To be visible to a user during checkout, an item's publishing state must be set to
- <strong>Published</strong> and the item's application must be published on Google Play.</p>
- <p class="note"><strong>Note:</strong> This is not true for test accounts. An item is visible to
- a test account if the application is not published and the item is published. See <a
- href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-real">Testing In-app
- Billing</a> for more information.</p>
- </li>
- <li><strong>Language</strong>
- <p>The language setting determines which languages are used to display the item title and
- item description during checkout. A product list inherits its default language from the
- parent application. You can add more languages by clicking <strong>add language</strong>. You
- can also choose to have the title and description automatically translated from the default
- language by selecting the <strong>Fill fields with auto translation</strong> checkbox (see
- figure 4). If you do not use the auto translation feature, you must provide the translated
- versions of the title and description.</p>
- </li>
- <li><strong>Title</strong>
- <p>The title is a short descriptor for the item. For example, "Sleeping potion." Titles must be
- unique across an application's namespace. Every item must have a title. The title is visible to
- users during checkout. For optimum appearance, titles should be no longer than 25 characters;
- however, titles can be up to 55 characters in length.</p>
- </li>
- <li><strong>Description</strong>
- <p>The description is a long descriptor for the item. For example, "Instantly puts creatures to
- sleep. Does not work on angry elves." Every item must have a description. The description is
- visible to users during checkout. Descriptions can be up to 80 characters in length.</p>
- </li>
- <li><strong>Price</strong>
- <p>You must provide a default price in your home currency. You can also provide prices in other
- currencies, but you can do this only if a currency's corresponding country is listed as a
- target country for your application. You can specify target countries on the Edit Application
- page in the Google Play developer console.</p>
- <p>To specify prices in other currencies, you can manually enter the price for each
- currency or you can click <strong>Auto Fill</strong> and let Google Play do a one-time
- conversion from your home currency to the currencies you are targeting (see figure 4).</p>
- <p>For subscription items, note that you can not change the item's price once you have published it. </p>
- </li>
-</ul>
-<img src="{@docRoot}images/billing_list_form_2.png" height="1226" id="figure4" />
-<p class="img-caption">
- <strong>Figure 4.</strong> Specifying additional currencies and additional languages for the
- item title and description.
-</p>
-
-<p>For more information about product IDs and product lists, see <a
-href="http://market.android.com/support/bin/answer.py?answer=1072599">Creating In-App Product
-IDs</a>. For more information about pricing, see <a
-href="http://market.android.com/support/bin/answer.py?answer=1153485">In-App Billing
-Pricing</a>.</p>
-
-<p class="note"><strong>Note</strong>: Be sure to plan your product ID namespace. You cannot reuse
-or modify product IDs after you save them.</p>
-
-<h3 id="billing-bulk-add">Adding a batch of items to a product list</h3>
-
-<p>To add a batch of items to a product list using a CSV file, you first need to create your CSV
-file. The data values that you specify in the CSV file represent the same data values you specify
-manually through the In-app Products UI (see <a href="#billing-form-add">Adding items one at a time
-to a product list</a>).
-
-<p>If you are importing and exporting CSV files with in-app products, please
-keep tax-inclusive pricing in mind. If you use auto-fill, you can provide a
-tax-exclusive default price and tax-inclusive prices will be auto-filled. If you
-do not use auto-fill, prices you provide must include tax.</p>
-
-<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
-
-The CSV file uses commas (,) and semi-colons (;) to separate data values.
-Commas are used to separate primary data values, and semi-colons are used to separate subvalues. For
-example, the syntax for the CSV file is as follows:</p>
-
-<p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em>
-","<em>locale</em>; <em>title</em>; <em>description</em>","<em>autofill</em>","<em>country</em>;
-<em>price</em>"
-</p>
-
-<p>Descriptions and usage details are provided below.</p>
-
-<ul>
- <li><em>product_id</em>
- <p>This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify
- a <em>product_id</em> that already exists in a product list, and you choose to overwrite
- the product list while importing the CSV file, the data for the existing item is overwritten with
- the values specified in the CSV file. The overwrite feature does not delete items that are on a
- product list but not present in the CSV file.</p>
- </li>
- <li><em>publish_state</em>
- <p>This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code>
- published</code> or <code>unpublished</code>.</p>
- </li>
- <li><em>purchase_type</em>
- <p>This is equivalent to the Purchase Type setting in the In-app Products UI. Can be <code>
- managed_by_android</code>, which is equivalent to <strong>Managed per user account
- </strong> in the In-app Products UI, or <code>managed_by_publisher</code>, which is equivalent
- to <strong>Unmanaged</strong> in the In-app Products UI.</p>
- </li>
- <li><em>autotranslate</em>
- <p>This is equivalent to selecting the <strong>Fill fields with auto translation</strong>
- checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>.</p>
- </li>
- <li><em>locale</em>
- <p>This is equivalent to the Language setting in the In-app Products UI. You must have an entry
- for the default locale. The default locale must be the first entry in the list of
- locales, and it must include a <em>title</em> and <em>description</em>. If you want to provide
- translated versions of the <em>title</em> and <em>description</em> in addition to the default,
- you must use the following syntax rules:</p>
- <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale,
- default title, default description, and other locales using the following format:</p>
- <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>;
- <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_3</em>, ..."</p>
- <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale,
- default title, and default description as well as the translated titles and descriptions using
- the following format:</p>
- <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>;
- <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>;
- <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>;
- <em>locale_3_description</em>; ..."</p>
- <p>See table 1 for a list of the language codes you can use with the <em>locale</em> field.</p>
- </li>
- <li><em>title</em>
- <p>This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em>
- contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
- should also be escaped with a backslash (for example, "\\">.</p>
- </li>
- <li><em>description</em>
- <p>This is equivalent to the Description in the In-app Products UI. If the <em>description</em>
- contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
- should also be escaped with a backslash (for example, "\\">.</p>
- </li>
- <li><em>autofill</em>
- <p>This is equivalent to clicking <strong>Auto Fill</strong> in the In-app Products UI. Can be
- <code>true</code> or <code>false</code>. The syntax for specifying the <em>country</em>
- and <em>price</em> varies depending on which <em>autofill</em> setting you use.</p>
- <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default
- price in your home currency and you must use this syntax:</p>
- <p>"true","<em>default_price_in_home_currency</em>"
- <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
- and a <em>price</em> for each currency and you must use the following syntax:</p>
- <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
- <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
- </li>
- <li><em>country</em>
- <p>The country for which you are specifying a price. You can only list countries that your
- application is targeting. The country codes are two-letter uppercase
- ISO country codes (such as "US") as defined by
- <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>.</p>
- </li>
- <li><em>price</em>
- <p>This is equivalent to the Price in the In-app Products UI. The price must be specified in
- micro-units. To convert a currency value to micro-units, you multiply the real value by 1,000,000.
- For example, if you want to sell an in-app item for $1.99 you specify 1990000 in the
- <em>price</em> field.</p>
- </li>
-</ul>
-
-<p class="table-caption" id="language-table"><strong>Table 1.</strong> Language codes you can use
-with the <em>locale</em> field.</p>
-
-<table>
-
-<tr>
-<th>Language</th>
-<th>Code</th>
-<th>Language</th>
-<th>Code</th>
-</tr>
-<tr>
-<td>Chinese</td>
-<td>zh_TW</td>
-<td>Italian</td>
-<td>it_IT</td>
-</tr>
-<tr>
-<td>Czech</td>
-<td>cs_CZ</td>
-<td>Japanese</td>
-<td>ja_JP</td>
-</tr>
-<tr>
-<td>Danish</td>
-<td>da_DK</td>
-<td>Korean</td>
-<td>ko_KR</td>
-</tr>
-<tr>
-<td>Dutch</td>
-<td>nl_NL</td>
-<td>Norwegian</td>
-<td>no_NO</td>
-</tr>
-<tr>
-<td>English</td>
-<td>en_US</td>
-<td>Polish</td>
-<td>pl_PL</td>
-</tr>
-<tr>
-<td>French</td>
-<td>fr_FR</td>
-<td>Portuguese</td>
-<td>pt_PT</td>
-</tr>
-<tr>
-<td>Finnish</td>
-<td>fi_FI</td>
-<td>Russian</td>
-<td>ru_RU</td>
-</tr>
-<tr>
-<td>German</td>
-<td>de_DE</td>
-<td>Spanish</td>
-<td>es_ES</td>
-</tr>
-<tr>
-<td>Hebrew</td>
-<td>iw_IL</td>
-<td>Swedish</td>
-<td>sv_SE</td>
-</tr>
-<tr>
-<td>Hindi</td>
-<td>hi_IN</td>
-<td>--</td>
-<td>--</td>
-</tr>
-</table>
-
-<p>To import the items that are specified in your CSV file, do the following:</p>
-
-<ol>
- <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
- <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
- <strong>In-app Products</strong>.</li>
- <li>On the In-app Products List page, click <strong>Choose File</strong> and select your CSV
-file.
- <p>The CSV file must be on your local computer or on a local disk that is connected to your
- computer.</p>
- </li>
- <li>Select the <strong>Overwrite</strong> checkbox if you want to overwrite existing items in
- your product list.
- <p>This option overwrites values of existing items only if the value of the <em>product_id</em>
- in the CSV file matches the In-app Product ID for an existing item in the product list.
- Overwriting does not delete items that are on a product list but not present in the CSV
- file.</p>
- </li>
- <li>On the In-app Products List page, click <strong>Import from CSV</strong>.</li>
-</ol>
-
-<p>You can also export an existing product list to a CSV file by clicking <strong>Export to CSV
-</strong> on the In-app Product List page. This is useful if you have manually added items to
-a product list and you want to start managing the product list through a CSV file.</p>
-
-<h3 id="billing-purchase-type">Choosing a Purchase Type</h3>
-
-<p>An item's purchase type controls how Google Play manages the purchase of the item. There are
-two purchase types: "managed per user account" and "unmanaged."</p>
-
-<p>Items that are managed per user account can be purchased only once per user account. When an item
-is managed per user account, Google Play permanently stores the transaction information for each
-item on a per-user basis. This enables you to query Google Play with the
-<code>RESTORE_TRANSACTIONS</code> request and restore the state of the items a specific user has
-purchased.</p>
-
-<p>If a user attempts to purchase a managed item that has already been purchased, Google Play
-displays an "Item already purchased" error. This occurs during checkout, when Google Play
-displays the price and description information on the checkout page. When the user dismisses the
-error message, the checkout page disappears and the user returns to your user interface. As a best
-practice, your application should prevent the user from seeing this error. The sample application
-demonstrates how you can do this by keeping track of items that are managed and already purchased
-and not allowing users to select those items from the list. Your application should do something
-similar&mdash;either graying out the item or hiding it so that it cannot be selected.</p>
-
-<p>The "manage by user account" purchase type is useful if you are selling items such as game levels
-or application features. These items are not transient and usually need to be restored whenever a
-user reinstalls your application, wipes the data on their device, or installs your application on a
-new device.</p>
-
-<p>Items that are unmanaged do not have their transaction information stored on Google Play,
-which means you cannot query Google Play to retrieve transaction information for items whose
-purchase type is listed as unmanaged. You are responsible for managing the transaction information
-of unmanaged items. Also, unmanaged items can be purchased multiple times as far as Google Play
-is concerned, so it's also up to you to control how many times an unmanaged item can be
-purchased.</p>
-
-<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or
-magic spells. These items are consumed within your application and are usually purchased multiple
-times.</p>
-
-<h2 id="billing-refunds">Handling Refunds</h2>
-
-<p>In-app billing does not allow users to send a refund request to Google Play. Refunds for
-in-app purchases must be directed to you (the application developer). You can then process the
-refund through your Google Wallet merchant account. When you do this, Google Play receives a
-refund notification from Google Wallet, and Google Play sends a refund message to your
-application. For more information, see <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
-IN_APP_NOTIFY messages</a> and <a
-href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
-Pricing</a>.</p>
-
-<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to issue
-refunds or cancel in-app billing transactions. You must do this manually through your Google
-Wallet merchant account. However, you can use the Google Wallet API to retrieve order
-information.</p>
-
-<h2 id="billing-testing-setup">Setting Up Test Accounts</h2>
-
-<p>The Google Play publisher site lets you set up one or more test accounts. A test account is a
-regular Google account that you register on the publisher site as a test account. Test accounts are
-authorized to make in-app purchases from applications that you have uploaded to the Google Play
-site but have not yet published.</p>
-
-<p>You can use any Google account as a test account. Test accounts are useful if you want to let
-multiple people test in-app billing on applications without giving them access to your publisher
-account's sign-in credentials. If you want to own and control the test accounts, you can create the
-accounts yourself and distribute the credentials to your developers or testers.</p>
-
-<p>Test accounts have three limitations:</p>
-
-<ul>
- <li>Test account users can make purchase requests only within applications that are already
- uploaded to your publisher account (although the application doesn't need to be published).</li>
- <li>Test accounts can only be used to purchase items that are listed (and published) in an
- application's product list.</li>
- <li>Test account users do not have access to your publisher account and cannot upload applications
- to your publisher account.</li>
-</ul>
-
-<p>To add test accounts to your publisher account, follow these steps:</p>
-
-<ol>
- <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
- <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
- <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
- 5).</li>
- <li>In Test Accounts, add the email addresses for the test accounts you want to register,
- separating each account with a comma.</li>
- <li>Click <strong>Save</strong> to save your profile changes.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure5" />
-<p class="img-caption">
- <strong>Figure 5.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
- page lets you register test accounts.
-</p>
-
-<h2 id="billing-support">Where to Get Support</h2>
-
-<p>If you have questions or encounter problems while implementing in-app billing, contact the
-support resources listed in the following table (see table 2). By directing your queries to the
-correct forum, you can get the support you need more quickly.</p>
-
-<p class="table-caption" id="support-table"><strong>Table 2.</strong> Developer support resources
-for Google Play in-app billing.</p>
-
-<table>
-
-<tr>
-<th>Support Type</th>
-<th>Resource</th>
-<th>Range of Topics</th>
-</tr>
-<tr>
-<td rowspan="2">Development and testing issues</td>
-<td>Google Groups: <a
-href="http://groups.google.com/group/android-developers">android-developers</a> </td>
-<td rowspan="2">In-app billing integration questions, user experience ideas, handling of responses,
-obfuscating code, IPC, test environment setup.</td>
-</tr>
-<tr>
-<td>Stack Overflow: <a
-href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/
-android</a></td>
-</tr>
-<tr>
-<td>Billing issue tracker</td>
-<td><a href="http://code.google.com/p/marketbilling/issues/">Billing
-project issue tracker</a></td>
-<td>Bug and issue reports related specifically to in-app billing sample code.</td>
-</tr>
-</table>
-
-<p>For general information about how to post to the groups listed above, see <a
-href="{@docRoot}resources/community-groups.html">Developer Forums</a> document in the Resources
-tab.</p>
-
-
-
diff --git a/docs/html/guide/google/play/billing/billing_best_practices.jd b/docs/html/guide/google/play/billing/billing_best_practices.jd
deleted file mode 100755
index 850c661..0000000
--- a/docs/html/guide/google/play/billing/billing_best_practices.jd
+++ /dev/null
@@ -1,111 +0,0 @@
-page.title=Security and Design
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-security">Security Best Practices</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>As you design your in-app billing implementation, be sure to follow the security and design
-guidelines that are discussed in this document. These guidelines are recommended best practices for
-anyone who is using Google Play's in-app billing service.</p>
-
-<h2>Security Best Practices</h2>
-
-<h4>Perform signature verification tasks on a server</h4>
-<p>If practical, you should perform signature verification on a remote server and not on a device.
-Implementing the verification process on a server makes it difficult for attackers to break the
-verification process by reverse engineering your .apk file. If you do offload security processing to
-a remote server, be sure that the device-server handshake is secure.</p>
-
-<h4>Protect your unlocked content</h4>
-<p>To prevent malicious users from redistributing your unlocked content, do not bundle it in your
-.apk file. Instead, do one of the following:</p>
- <ul>
- <li>Use a real-time service to deliver your content, such as a content feed. Delivering content
- through a real-time service allows you to keep your content fresh.</li>
- <li>Use a remote server to deliver your content.</li>
- </ul>
-<p>When you deliver content from a remote server or a real-time service, you can store the unlocked
-content in device memory or store it on the device's SD card. If you store content on an SD card, be
-sure to encrypt the content and use a device-specific encryption key.</p>
-
-<h4>Obfuscate your code</h4>
-<p>You should obfuscate your in-app billing code so it is difficult for an attacker to reverse
-engineer security protocols and other application components. At a minimum, we recommend that you
-run an obfuscation tool like <a
-href="{@docRoot}tools/help/proguard.html">Proguard</a> on your
-code.</p>
-<p>In addition to running an obfuscation program, we recommend that you use the following techniques
-to obfuscate your in-app billing code.</p>
-<ul>
- <li>Inline methods into other methods.</li>
- <li>Construct strings on the fly instead of defining them as constants.</li>
- <li>Use Java reflection to call methods.</li>
-</ul>
-<p>Using these techniques can help reduce the attack surface of your application and help minimize
-attacks that can compromise your in-app billing implementation.</p>
-<div class="note">
- <p><strong>Note:</strong> If you use Proguard to obfuscate your code, you must add the following
- line to your Proguard configuration file:</p>
- <p><code>-keep class com.android.vending.billing.**</code></p>
-</div>
-
-<h4>Modify all sample application code</h4>
-<p>The in-app billing sample application is publicly distributed and can be downloaded by anyone,
-which means it is relatively easy for an attacker to reverse engineer your application if you use
-the sample code exactly as it is published. The sample application is intended to be used only as an
-example. If you use any part of the sample application, you must modify it before you publish it or
-release it as part of a production application.</p>
-<p>In particular, attackers look for known entry points and exit points in an application, so it is
-important that you modify these parts of your code that are identical to the sample application.</p>
-
-<h4>Use secure random nonces</h4>
-<p>Nonces must not be predictable or reused. Always use a cryptographically secure random number
-generator (like {@link java.security.SecureRandom}) when you generate nonces. This can help reduce
-replay attacks.</p>
-<p>Also, if you are performing nonce verification on a server, make sure that you generate the
-nonces on the server.</p>
-
-<h4>Take action against trademark and copyright infringement</h4>
-<p>If you see your content being redistributed on Google Play, act quickly and decisively. File a
-<a href="http://market.android.com/support/bin/answer.py?hl=en&amp;answer=141511">trademark notice
-of infringement</a> or a <a href="http://www.google.com/android_dmca.html">copyright notice of
-infringement</a>.</p>
-
-<h4>Implement a revocability scheme for unlocked content</h4>
-<p>If you are using a remote server to deliver or manage content, have your application verify the
-purchase state of the unlocked content whenever a user accesses the content. This allows you to
-revoke use when necessary and minimize piracy.</p>
-
-<h4>Protect your Google Play public key</h4>
-<p>To keep your public key safe from malicious users and hackers, do not embed it in any code as a
-literal string. Instead, construct the string at runtime from pieces or use bit manipulation (for
-example, XOR with some other string) to hide the actual key. The key itself is not secret
-information, but you do not want to make it easy for a hacker or malicious user to replace the
-public key with another key.</p>
-
diff --git a/docs/html/guide/google/play/billing/billing_integrate.jd b/docs/html/guide/google/play/billing/billing_integrate.jd
deleted file mode 100755
index 2d1582e..0000000
--- a/docs/html/guide/google/play/billing/billing_integrate.jd
+++ /dev/null
@@ -1,1100 +0,0 @@
-page.title=Implementing In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-download">Downloading the Sample Application</a></li>
- <li><a href="#billing-add-aidl">Adding the AIDL file to your project</a></li>
- <li><a href="#billing-permission">Updating Your Application's Manifest</a></li>
- <li><a href="#billing-service">Creating a Service</a></li>
- <li><a href="#billing-broadcast-receiver">Creating a BroadcastReceiver</a></li>
- <li><a href="#billing-signatures">Creating a security processing component</a></li>
- <li><a href="#billing-implement">Modifying Your Application Code</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="#billing-download">Sample Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>In-app Billing on Google Play provides a straightforward, simple interface for sending in-app
-billing requests and managing in-app billing transactions using Google Play. This document helps
-you implement in-app billing by stepping through the primary implementation tasks, using the in-app
-billing sample application as an example.</p>
-
-<p>Before you implement in-app billing in your own application, be sure that you read <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app Billing</a> and <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>. These
-documents provide background information that will make it easier for you to implement in-app
-billing.</p>
-
-<p>To implement in-app billing in your application, you need to do the following:</p>
-<ol>
- <li><a href="#billing-download">Download the in-app billing sample application</a>.</li>
- <li><a href="#billing-add-aidl">Add the IMarketBillingService.aidl file</a> to your project.</li>
- <li><a href="#billing-permission">Update your AndroidManifest.xml file</a>.</li>
- <li><a href="#billing-service">Create a Service</a> and bind it to the
- <code>MarketBillingService</code> so your application can send billing requests and receive
- billing responses from Google Play.</li>
- <li><a href="#billing-broadcast-receiver">Create a BroadcastReceiver</a> to handle broadcast
- intents from Google Play.</li>
- <li><a href="#billing-signatures">Create a security processing component</a> to verify the
- integrity of the transaction messages that are sent by Google Play.</li>
- <li><a href="#billing-implement">Modify your application code</a> to support in-app billing.</li>
-</ol>
-
-<h2 id="billing-download">Downloading the Sample Application</h2>
-
-<p>The in-app billing sample application shows you how to perform several tasks that are common to
-all in-app billing implementations, including:</p>
-
-<ul>
- <li>Sending in-app billing requests to Google Play.</li>
- <li>Handling synchronous responses from Google Play.</li>
- <li>Handling broadcast intents (asynchronous responses) from Google Play.</li>
- <li>Using in-app billing security mechanisms to verify the integrity of billing responses.</li>
- <li>Creating a user interface that lets users select items for purchase.</li>
-</ul>
-
-<p>The sample application includes an application file (<code>Dungeons.java</code>), the AIDL file
-for the <code>MarketBillingService</code> (<code>IMarketBillingService.aidl</code>), and several
-classes that demonstrate in-app billing messaging. It also includes a class that demonstrates basic
-security tasks, such as signature verification.</p>
-
-<p>Table 1 lists the source files that are included with the sample application.</p>
-<p class="table-caption" id="source-files-table"><strong>Table 1.</strong> In-app billing sample
-application source files.</p>
-
-<table>
-<tr>
-<th>File</th>
-<th>Description</th>
-</tr>
-
-<tr>
-<td>IMarketBillingService.aidl</td>
-<td>Android Interface Definition Library (AIDL) file that defines the IPC interface to Google
-Play's in-app billing service (<code>MarketBillingService</code>).</td>
-</tr>
-
-<tr>
-<td>Dungeons.java</td>
-<td>Sample application file that provides a UI for making purchases and displaying purchase
-history.</td>
-</tr>
-
-<tr>
-<td>PurchaseDatabase.java</td>
-<td>A local database for storing purchase information.</td>
-</tr>
-
-<tr>
- <td>BillingReceiver.java</td>
- <td>A {@link android.content.BroadcastReceiver} that receives asynchronous response messages
- (broadcast intents) from Google Play. Forwards all messages to the
- <code>BillingService</code>.</td>
-</tr>
-<tr>
- <td>BillingService.java</td>
- <td>A {@link android.app.Service} that sends messages to Google Play on behalf of the
- application by connecting (binding) to the <code>MarketBillingService</code>.</td>
-</tr>
-
-<tr>
- <td>ResponseHandler.java</td>
- <td>A {@link android.os.Handler} that contains methods for updating the purchases database and the
- UI.</td>
-</tr>
-
-<tr>
- <td>PurchaseObserver.java</td>
- <td>An abstract class for observing changes related to purchases.</td>
-</tr>
-
-<tr>
-<td>Security.java</td>
-<td>Provides various security-related methods.</td>
-</tr>
-
-<tr>
-<td>Consts.java</td>
-<td>Defines various Google Play constants and sample application constants. All constants that
-are defined by Google Play must be defined the same way in your application.</td>
-</tr>
-
-<tr>
-<td>Base64.java and Base64DecoderException.java</td>
-<td>Provides conversion services from binary to Base64 encoding. The <code>Security</code> class
-relies on these utility classes.</td>
-</tr>
-
-</table>
-
-<p>The in-app billing sample application is available as a downloadable component of the Android
-SDK. To download the sample application component, launch the Android SDK Manager and then
-select the <strong>Google Market Billing package</strong> component (see figure 1), and click <strong>Install
-Selected</strong> to begin the download.</p>
-
-
-<img src="{@docRoot}images/billing_package.png" height="325" id="figure1" />
-<p class="img-caption">
- <strong>Figure 1.</strong> The Google Market Billing package contains the sample application and
- the AIDL file.
-</p>
-
-<p>When the download is complete, the Android SDK Manager saves the component into the
-following directory:</p>
-
-<p><code>&lt;sdk&gt;/extras/google/market_billing/</code></p>
-
-<p>If you want to see an end-to-end demonstration of in-app billing before you integrate in-app
-billing into your own application, you can build and run the sample application. Building and
-running the sample application involves three tasks:</p>
-
-<ul>
- <li>Configuring and building the sample application.</li>
- <li>Uploading the sample application to Google Play.</li>
- <li>Setting up test accounts and running the sample application.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Building and running the sample application is necessary only
-if you want to see a demonstration of in-app billing. If you do not want to run the sample
-application, you can skip to the next section, <a href="#billing-add-aidl">Adding the AIDL file to
-your project</a>.</p>
-
-<h3>Configuring and building the sample application</h3>
-
-<p>Before you can run the sample application, you need to configure it and build it by doing the
-following:</p>
-
-<ol>
- <li><strong>Add your Google Play public key to the sample application code.</strong>
- <p>This enables the application to verify the signature of the transaction information that is
- returned from Google Play. To add your public key to the sample application code, do the
- following:</p>
- <ol>
- <li>Log in to your Google Play <a href="http://play.google.com/apps/publish">publisher
- account</a>.</li>
- <li>On the upper left part of the page, under your name, click <strong>Edit
- Profile</strong>.</li>
- <li>On the Edit Profile page, scroll down to the <strong>Licensing &amp; In-app
- Billing</strong> panel.</li>
- <li>Copy your public key.</li>
- <li>Open <code>src/com/example/dungeons/Security.java</code> in the editor of your choice.
- <p>You can find this file in the sample application's project folder.</p>
- </li>
- <li>Add your public key to the following line of code:
- <p><code>String base64EncodedPublicKey = "your public key here";</code></p>
- </li>
- <li>Save the file.</li>
- </ol>
- </li>
- <li><strong>Change the package name of the sample application.</strong>
- <p>The current package name is <code>com.example.dungeons</code>. Google Play does not let
- you upload applications with package names that contain <code>com.example</code>, so you must
- change the package name to something else.</p>
- </li>
- <li><strong>Build the sample application in release mode and sign it.</strong>
- <p>To learn how to build and sign applications, see <a
- href="{@docRoot}tools/building/index.html">Building and Running</a>.</p>
- </li>
-</ol>
-
-<h3>Uploading the sample application</h3>
-
-<p>After you build a release version of the sample application and sign it, you need to upload it as
-a draft to the Google Play publisher site. You also need to create a product list for the in-app
-items that are available for purchase in the sample application. The following instructions show you
-how to do this.</p>
-<ol>
- <li><strong>Upload the release version of the sample application to Google Play.</strong>
- <p>Do not publish the sample application; leave it as an unpublished draft application. The
- sample application is for demonstration purposes only and should not be made publicly available
- on Google Play. To learn how to upload an application to Google Play, see <a
- href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
- applications</a>.</p>
- </li>
- <li><strong>Create a product list for the sample application.</strong>
- <p>The sample application lets you purchase two items: a two-handed sword
- (<code>sword_001</code>) and a potion (<code>potion_001</code>). We recommend that you set up
- your product list so that <code>sword_001</code> has a purchase type of "Managed per user
- account" and <code>potion_001</code> has a purchase type of "Unmanaged" so you can see how these
- two purchase types behave. To learn how to set up a product list, see <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">Creating a Product
- List</a>.</p>
- <p class="note"><strong>Note:</strong> You must publish the items in your product
- list (<code>sword_001</code> and <code>potion_001</code>) even though you are not publishing the
- sample application. Also, you must have a Google Wallet Merchant account to add items to the
- sample application's product list.</p>
- </li>
-</ol>
-
-<h3>Running the sample application</h3>
-
-<p>You cannot run the sample application in the emulator. You must install the sample application
-onto a device to run it. To run the sample application, do the following:</p>
-
-<ol>
- <li><strong>Make sure you have at least one test account registered under your Google Play
- publisher account.</strong>
- <p>You cannot purchase items from yourself (Google Wallet prohibits this), so you need to
- create at least one test account that you can use to purchase items in the sample application.
- To learn how to set up a test account, see <a
- href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-setup">Setting up Test
- Accounts</a>.</p>
- </li>
- <li><strong>Verify that your device is running a supported version of the Google Play
- application or the MyApps application.</strong>
- <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
- the MyApps application. If your device is running any other version of Android, in-app billing
- requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
- version of the Google Play application, see <a
- href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
- Play</a>.</p>
- </li>
- <li><strong>Install the application onto your device.</strong>
- <p>Even though you uploaded the application to Google Play, the application is not published,
- so you cannot download it from Google Play to a device. Instead, you must install the
- application onto your device. To learn how to install an application onto a device, see <a
- href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
- device</a>.</p>
- </li>
- <li><strong>Make one of your test accounts the primary account on your device.</strong>
- <p>The primary account on your device must be one of the <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
- that you registered on the Google Play publisher site. If the primary account on your device is not a
- test account, you must do a factory reset of the device and then sign in with one of your test
- accounts. To perform a factory reset, do the following:</p>
- <ol>
- <li>Open Settings on your device.</li>
- <li>Touch <strong>Privacy</strong>.</li>
- <li>Touch <strong>Factory data reset</strong>.</li>
- <li>Touch <strong>Reset phone</strong>.</li>
- <li>After the phone resets, be sure to sign in with one of your test accounts during the
- device setup process.</li>
- </ol>
- </li>
- <li><strong>Run the application and purchase the sword or the potion.</strong>
- <p>When you use a test account to purchase items, the test account is billed through Google
- Wallet and your Google Wallet Merchant account receives a payout for the purchase.
- Therefore, you may want to refund purchases that are made with test accounts, otherwise the
- purchases will show up as actual payouts to your merchant account.</p>
-</ol>
-
-<p class="note"><strong>Note</strong>: Debug log messages are turned off by default in the
-sample application. You can turn them on by setting the variable <code>DEBUG</code>
-to <code>true</code> in the <code>Consts.java</code> file.</p>
-
-<h2 id="billing-add-aidl">Adding the AIDL file to your project</h2>
-
-<p>The sample application contains an Android Interface Definition Language (AIDL) file, which
-defines the interface to Google Play's in-app billing service
-(<code>MarketBillingService</code>). When you add this file to your project, the Android build
-environment creates an interface file (<code>IMarketBillingService.java</code>). You can then use
-this interface to make billing requests by invoking IPC method calls.</p>
-
-<p>If you are using the ADT plug-in with Eclipse, you can just add this file to your
-<code>/src</code> directory. Eclipse will automatically generate the interface file when you build
-your project (which should happen immediately). If you are not using the ADT plug-in, you can put
-the AIDL file into your project and use the Ant tool to build your project so that the
-<code>IMarketBillingService.java</code> file gets generated.</p>
-
-<p>To add the <code>IMarketBillingService.aidl</code> file to your project, do the following:</p>
-
-<ol>
- <li>Create the following directory in your application's <code>/src</code> directory:
- <p><code>com/android/vending/billing/</code></p>
- </li>
- <li>Copy the <code>IMarketBillingService.aidl</code> file into the
- <code>sample/src/com/android/vending/billing/</code> directory.</li>
- <li>Build your application.</li>
-</ol>
-
-<p>You should now find a generated interface file named <code>IMarketBillingService.java</code> in
-the <code>gen</code> folder of your project.</p>
-
-<h2 id="billing-permission">Updating Your Application's Manifest</h2>
-
-<p>In-app billing relies on the Google Play application, which handles all communication between
-your application and the Google Play server. To use the Google Play application, your
-application must request the proper permission. You can do this by adding the
-<code>com.android.vending.BILLING</code> permission to your AndroidManifest.xml file. If your
-application does not declare the in-app billing permission, but attempts to send billing requests,
-Google Play will refuse the requests and respond with a <code>RESULT_DEVELOPER_ERROR</code>
-response code.</p>
-
-<p>In addition to the billing permission, you need to declare the {@link
-android.content.BroadcastReceiver} that you will use to receive asynchronous response messages
-(broadcast intents) from Google Play, and you need to declare the {@link android.app.Service}
-that you will use to bind with the <code>IMarketBillingService</code> and send messages to Google
-Play. You must also declare <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">intent filters</a> for the {@link
-android.content.BroadcastReceiver} so that the Android system knows how to handle the broadcast
-intents that are sent from the Google Play application.</p>
-
-<p>For example, here is how the in-app billing sample application declares the billing permission,
-the {@link android.content.BroadcastReceiver}, the {@link android.app.Service}, and the intent
-filters. In the sample application, <code>BillingReceiver</code> is the {@link
-android.content.BroadcastReceiver} that handles broadcast intents from the Google Play
-application and <code>BillingService</code> is the {@link android.app.Service} that sends requests
-to the Google Play application.</p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.dungeons"
- android:versionCode="1"
- android:versionName="1.0"&gt;
-
- &lt;uses-permission android:name="com.android.vending.BILLING" /&gt;
-
- &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
- &lt;activity android:name=".Dungeons" android:label="@string/app_name"&gt;
- &lt;intent-filter&gt;
- &lt;action android:name="android.intent.action.MAIN" /&gt;
- &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
- &lt;/intent-filter&gt;
- &lt;/activity&gt;
-
- &lt;service android:name="BillingService" /&gt;
-
- &lt;receiver android:name="BillingReceiver"&gt;
- &lt;intent-filter&gt;
- &lt;action android:name="com.android.vending.billing.IN_APP_NOTIFY" /&gt;
- &lt;action android:name="com.android.vending.billing.RESPONSE_CODE" /&gt;
- &lt;action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" /&gt;
- &lt;/intent-filter&gt;
- &lt;/receiver&gt;
-
- &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<h2 id="billing-service">Creating a Local Service</h2>
-
-<p>Your application must have a local {@link android.app.Service} to facilitate messaging between
-your application and Google Play. At a minimum, this service must do the following:</p>
-
-<ul>
- <li>Bind to the <code>MarketBillingService</code>.
- <li>Send billing requests (as IPC method calls) to the Google Play application. The five types
- of billing requests include:
- <ul>
- <li><code>CHECK_BILLING_SUPPORTED</code> requests</li>
- <li><code>REQUEST_PURCHASE</code> requests</li>
- <li><code>GET_PURCHASE_INFORMATION</code> requests</li>
- <li><code>CONFIRM_NOTIFICATIONS</code> requests</li>
- <li><code>RESTORE_TRANSACTIONS</code> requests</li>
- </ul>
- </li>
- <li>Handle the synchronous response messages that are returned with each billing request.</li>
-</ul>
-
-<h3>Binding to the MarketBillingService</h3>
-
-<p>Binding to the <code>MarketBillingService</code> is relatively easy if you've already added the
-<code>IMarketBillingService.aidl</code> file to your project. The following code sample shows how to
-use the {@link android.content.Context#bindService bindService()} method to bind a service to the
-<code>MarketBillingService</code>. You could put this code in your service's {@link
-android.app.Activity#onCreate onCreate()} method.</p>
-
-<pre>
-try {
- boolean bindResult = mContext.bindService(
- new Intent("com.android.vending.billing.MarketBillingService.BIND"), this,
- Context.BIND_AUTO_CREATE);
- if (bindResult) {
- Log.i(TAG, "Service bind successful.");
- } else {
- Log.e(TAG, "Could not bind to the MarketBillingService.");
- }
-} catch (SecurityException e) {
- Log.e(TAG, "Security exception: " + e);
-}
-</pre>
-
-<p>After you bind to the service, you need to create a reference to the
-<code>IMarketBillingService</code> interface so you can make billing requests via IPC method calls.
-The following code shows you how to do this using the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method.</p>
-
-<pre>
-/**
- * The Android system calls this when we are connected to the MarketBillingService.
- */
- public void onServiceConnected(ComponentName name, IBinder service) {
- Log.i(TAG, "MarketBillingService connected.");
- mService = IMarketBillingService.Stub.asInterface(service);
- }
-</pre>
-
-<p>You can now use the <code>mService</code> reference to invoke the
-<code>sendBillingRequest()</code> method.</p>
-
-<p>For a complete implementation of a service that binds to the <code>MarketBillingService</code>,
-see the <code>BillingService</code> class in the sample application.</p>
-
-<h3>Sending billing requests to the MarketBillingService</h3>
-
-<p>Now that your {@link android.app.Service} has a reference to the
-<code>IMarketBillingService</code> interface, you can use that reference to send billing requests
-(via IPC method calls) to the <code>MarketBillingService</code>. The
-<code>MarketBillingService</code> IPC interface exposes a single public method
-(<code>sendBillingRequest()</code>), which takes a single {@link android.os.Bundle} parameter. The
-Bundle that you deliver with this method specifies the type of request you want to perform, using
-various key-value pairs. For instance, one key indicates the type of request you are making, another
-indicates the item being purchased, and another identifies your application. The
-<code>sendBillingRequest()</code> method immediately returns a Bundle containing an initial response
-code. However, this is not the complete purchase response; the complete response is delivered with
-an asynchronous broadcast intent. For more information about the various Bundle keys that are
-supported by the <code>MarketBillingService</code>, see <a
-href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
-Service Interface</a>.</p>
-
-<p>You can use the <code>sendBillingRequest()</code> method to send five types of billing requests.
-The five request types are specified using the <code>BILLING_REQUEST</code> Bundle key. This Bundle
-key can have the following five values:</p>
-
-<ul>
- <li><code>CHECK_BILLING_SUPPORTED</code>&mdash;verifies that the Google Play application
- supports in-app billing and the version of the In-app Billing API available.</li>
- <li><code>REQUEST_PURCHASE</code>&mdash;sends a purchase request for an in-app item.</li>
- <li><code>GET_PURCHASE_INFORMATION</code>&mdash;retrieves transaction information for a purchase
- or refund.</li>
- <li><code>CONFIRM_NOTIFICATIONS</code>&mdash;acknowledges that you received the transaction
- information for a purchase or refund.</li>
- <li><code>RESTORE_TRANSACTIONS</code>&mdash;retrieves a user's transaction history for <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
- purchases</a>.</li>
-</ul>
-
-<p>To make any of these billing requests, you first need to build an initial {@link
-android.os.Bundle} that contains the three keys that are required for all requests:
-<code>BILLING_REQUEST</code>, <code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The following
-code sample shows you how to create a helper method named <code>makeRequestBundle()</code> that does
-this.</p>
-
-<pre>
-protected Bundle makeRequestBundle(String method) {
- Bundle request = new Bundle();
- request.putString(BILLING_REQUEST, method);
- request.putInt(API_VERSION, 1);
- request.putString(PACKAGE_NAME, getPackageName());
- return request;
-</pre>
-
-<p>To use this helper method, you pass in a <code>String</code> that corresponds to one of the five
-types of billing requests. The method returns a Bundle that has the three required keys defined. The
-following sections show you how to use this helper method when you send a billing request.</p>
-
-<p class="caution"><strong>Important</strong>: You must make all in-app billing requests from your
-application's main thread.</p>
-
-<h4>Verifying that in-app billing is supported (CHECK_BILLING_SUPPPORTED)</h4>
-
-<p>The following code sample shows how to verify whether the Google Play application supports
-in-app billing and confirm what version of the API it supports. In the sample, <code>mService</code>
-is an instance of the <code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is CHECK_BILLING_SUPPORTED
-*/
- Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
- Bundle response = mService.sendBillingRequest(request);
- // Do something with this response.
-}
-</pre>
-
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. If you are offering subscriptions in
-your app, set the API_VERSION key to a value of "2", to confirm that In-app Billing v2 is
-available. For an examnple, see
-<a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#version">Subscriptions</a>.</p>
-
-<p>The <code>CHECK_BILLING_SUPPORTED</code> request returns a synchronous {@link
-android.os.Bundle} response, which contains only a single key: <code>RESPONSE_CODE</code>. The
-<code>RESPONSE_CODE</code> key can have the following values:</p>
-<ul>
- <li><code>RESULT_OK</code>&mdash;the spedified version of in-app billing is supported.</li>
- <li><code>RESULT_BILLING_UNAVAILABLE</code>&mdash;in-app billing is not available because the API
- version you specified is not recognized or the user is not eligible to make in-app purchases (for
- example, the user resides in a country that prohibits in-app purchases).</li>
- <li><code>RESULT_ERROR</code>&mdash;there was an error connecting with the Google Play
- application.</li>
- <li><code>RESULT_DEVELOPER_ERROR</code>&mdash;the application is trying to make an in-app billing
- request but the application has not declared the <code>com.android.vending.BILLING</code>
- permission in its manifest. Can also indicate that an application is not properly signed, or that
- you sent a malformed request.</li>
-</ul>
-
-<p>The <code>CHECK_BILLING_SUPPORTED</code> request does not trigger any asynchronous responses
-(broadcast intents).</p>
-
-<p>We recommend that you invoke the <code>CHECK_BILLING_SUPPORTED</code> request within a
-<code>RemoteException</code> block. When your code throws a <code>RemoteException</code> it
-indicates that the remote method call failed, which means that the Google Play application is out
-of date and needs to be updated. In this case, you can provide users with an error message that
-contains a link to the <a
-href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google Play</a>
-Help topic.</p>
-
-<p>The sample application demonstrates how you can handle this error condition (see
-<code>DIALOG_CANNOT_CONNECT_ID</code> in <code>Dungeons.java</code>).</p>
-
-<h4>Making a purchase request (REQUEST_PURCHASE)</h4>
-
-<p>To make a purchase request you must do the following:</p>
-
-<ul>
- <li>Send the <code>REQUEST_PURCHASE</code> request.</li>
- <li>Launch the {@link android.app.PendingIntent} that is returned from the Google Play
- application.</li>
- <li>Handle the broadcast intents that are sent by the Google Play application.</li>
-</ul>
-
-<h5>Making the request</h5>
-
-<p>You must specify four keys in the request {@link android.os.Bundle}. The following code sample
-shows how to set these keys and make a purchase request for a single in-app item. In the sample,
-<code>mProductId</code> is the Google Play product ID of an in-app item (which is listed in the
-application's <a href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">product
-list</a>), and <code>mService</code> is an instance of the <code>MarketBillingService</code>
-interface.</p>
-
-<pre>
-/**
-* Request type is REQUEST_PURCHASE
-*/
- Bundle request = makeRequestBundle("REQUEST_PURCHASE");
- request.putString(ITEM_ID, mProductId);
- // Request is for a standard in-app product
- request.putString(ITEM_TYPE, "inapp");
- // Note that the developer payload is optional.
- if (mDeveloperPayload != null) {
- request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
- }
- Bundle response = mService.sendBillingRequest(request);
- // Do something with this response.
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The <code>ITEM_ID</code> key is then added
-to the Bundle prior to invoking the <code>sendBillingRequest()</code> method.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains three keys:
-<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
-<code>RESPONSE_CODE</code> key provides you with the status of the request and the
-<code>REQUEST_ID</code> key provides you with a unique request identifier for the request. The
-<code>PURCHASE_INTENT</code> key provides you with a {@link android.app.PendingIntent}, which you
-can use to launch the checkout UI.</p>
-
-<h5>Using the pending intent</h5>
-
-<p>How you use the pending intent depends on which version of Android a device is running. On
-Android 1.6, you must use the pending intent to launch the checkout UI in its own separate task
-instead of your application's activity stack. On Android 2.0 and higher, you can use the pending
-intent to launch the checkout UI on your application's activity stack. The following code shows you
-how to do this. You can find this code in the <code>PurchaseObserver.java</code> file in the sample
-application.</p>
-
-<pre>
-void startBuyPageActivity(PendingIntent pendingIntent, Intent intent) {
- if (mStartIntentSender != null) {
- // This is on Android 2.0 and beyond. The in-app checkout page activity
- // will be on the activity stack of the application.
- try {
- // This implements the method call:
- // mActivity.startIntentSender(pendingIntent.getIntentSender(),
- // intent, 0, 0, 0);
- mStartIntentSenderArgs[0] = pendingIntent.getIntentSender();
- mStartIntentSenderArgs[1] = intent;
- mStartIntentSenderArgs[2] = Integer.valueOf(0);
- mStartIntentSenderArgs[3] = Integer.valueOf(0);
- mStartIntentSenderArgs[4] = Integer.valueOf(0);
- mStartIntentSender.invoke(mActivity, mStartIntentSenderArgs);
- } catch (Exception e) {
- Log.e(TAG, "error starting activity", e);
- }
- } else {
- // This is on Android 1.6. The in-app checkout page activity will be on its
- // own separate activity stack instead of on the activity stack of
- // the application.
- try {
- pendingIntent.send(mActivity, 0 /* code */, intent);
- } catch (CanceledException e) {
- Log.e(TAG, "error starting activity", e);
- }
- }
-}
-</pre>
-
-<p class="caution"><strong>Important:</strong> You must launch the pending intent from an activity
-context and not an application context. Also, you cannot use the <code>singleTop</code> <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launch mode</a> to launch the
-pending intent. If you do either of these, the Android system will not attach the pending intent to
-your application process. Instead, it will bring Google Play to the foreground, disrupting your
-application.</p>
-
-<h5>Handling broadcast intents</h5>
-
-<p>A <code>REQUEST_PURCHASE</code> request also triggers two asynchronous responses (broadcast
-intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
-which provides error information about the request. If the request does not generate an
-error, the <code>RESPONSE_CODE</code> broadcast intent returns <code>RESULT_OK</code>, which
-indicates that the request was successfully sent. (To be clear, a <code>RESULT_OK</code> response
-does not indicate that the requested purchase was successful; it indicates that the request was sent
-successfully to Google Play.)</p>
-
-<p>Next, when the requested transaction changes state (for example, the purchase is successfully
-charged to a credit card or the user cancels the purchase), the Google Play application sends an
-<code>IN_APP_NOTIFY</code> broadcast intent. This message contains a notification ID, which you can
-use to retrieve the transaction details for the <code>REQUEST_PURCHASE</code> request.</p>
-
-<p class="note"><strong>Note:</strong> The Google Play application also sends
-an <code>IN_APP_NOTIFY</code> for refunds. For more information, see <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
-IN_APP_NOTIFY messages</a>.</p>
-
-<p>Because the purchase process is not instantaneous and can take several seconds (or more), you
-must assume that a purchase request is pending from the time you receive a <code>RESULT_OK</code>
-message until you receive an <code>IN_APP_NOTIFY</code> message for the transaction. While the
-transaction is pending, the Google Play checkout UI displays an "Authorizing purchase..."
-notification; however, this notification is dismissed after 60 seconds and you should not rely on
-this notification as your primary means of conveying transaction status to users. Instead, we
-recommend that you do the following:</p>
-
-<ul>
- <li>Add an {@link android.app.Activity} to your application that shows users the status of pending
-and completed in-app purchases.</li>
- <li>Use a <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">status
-bar notification</a> to keep users informed about the progress of a purchase.</li>
-</ul>
-
-<p>To use these two UI elements, you could invoke a status bar notification with a ticker-text
-message that says "Purchase pending" when your application receives a <code>RESULT_OK</code>
-message. Then, when your application receives an <code>IN_APP_NOTIFY</code> message, you could
-update the notification with a new message that says "Purchase succeeded" or "Purchase failed." When
-a user touches the expanded status bar notification, you could launch the activity that shows the
-status of pending and completed in-app purchases.</p>
-
-<p>If you use some other UI technique to inform users about the state of a pending transaction,
-be sure that your pending status UI does not block your application. For example, you should avoid
-using a hovering progress wheel to convey the status of a pending transaction because a pending
-transaction could last a long time, particularly if a device loses network connectivity and cannot
-receive transaction updates from Google Play.</p>
-
-<p class="caution"><strong>Important:</strong> If a user purchases a managed item, you must prevent
-the user from purchasing the item again while the original transaction is pending. If a user
-attempts to purchase a managed item twice, and the first transaction is still pending, Google
-Play will display an error to the user; however, Google Play will not send an error to your
-application notifying you that the second purchase request was canceled. This might cause your
-application to get stuck in a pending state while it waits for an <code>IN_APP_NOTIFY</code> message
-for the second purchase request.</p>
-
-<h4>Retrieving transaction information for a purchase or refund (GET_PURCHASE_INFORMATION)</h4>
-
-<p>You retrieve transaction information in response to an <code>IN_APP_NOTIFY</code> broadcast
-intent. The <code>IN_APP_NOTIFY</code> message contains a notification ID, which you can use to
-retrieve transaction information.</p>
-
-<p>To retrieve transaction information for a purchase or refund you must specify five keys in the
-request {@link android.os.Bundle}. The following code sample shows how to set these keys and make
-the request. In the sample, <code>mService</code> is an instance of the
-<code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is GET_PURCHASE_INFORMATION
-*/
- Bundle request = makeRequestBundle("GET_PURCHASE_INFORMATION");
- request.putLong(REQUEST_NONCE, mNonce);
- request.putStringArray(NOTIFY_IDS, mNotifyIds);
- Bundle response = mService.sendBillingRequest(request);
- // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional keys are then added to the
-bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
-must generate. The Google Play application returns this nonce with the
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the integrity of the
-transaction information. The <code>NOTIFY_IDS</code> key contains an array of notification IDs,
-which you received in the <code>IN_APP_NOTIFY</code> broadcast intent.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>GET_PURCHASE_INFORMATION</code> request also triggers two asynchronous responses
-(broadcast intents). First, the Google Play application sends a <code>RESPONSE_CODE</code>
-broadcast intent, which provides status and error information about the request. Next, if the
-request was successful, the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code>
-broadcast intent. This message contains detailed transaction information. The transaction
-information is contained in a signed JSON string (unencrypted). The message includes the signature
-so you can verify the integrity of the signed string.</p>
-
-<h4>Acknowledging transaction information (CONFIRM_NOTIFICATIONS)</h4>
-
-<p>To acknowledge that you received transaction information you send a
-<code>CONFIRM_NOTIFICATIONS</code> request. You must specify four keys in the request {@link
-android.os.Bundle}. The following code sample shows how to set these keys and make the request. In
-the sample, <code>mService</code> is an instance of the <code>MarketBillingService</code>
-interface.</p>
-
-<pre>
-/**
-* Request type is CONFIRM_NOTIFICATIONS
-*/
- Bundle request = makeRequestBundle("CONFIRM_NOTIFICATIONS");
- request.putStringArray(NOTIFY_IDS, mNotifyIds);
- Bundle response = mService.sendBillingRequest(request);
- // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>NOTIFY_IDS</code> key
-is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>NOTIFY_IDS</code> key contains an array of notification IDs, which you received in an
-<code>IN_APP_NOTIFY</code> broadcast intent and also used in a <code>GET_PURCHASE_INFORMATION</code>
-request.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>CONFIRM_NOTIFICATIONS</code> request triggers a single asynchronous response&mdash;a
-<code>RESPONSE_CODE</code> broadcast intent. This broadcast intent provides status and error
-information about the request.</p>
-
-<p>You must send a confirmation when you receive transaction information from Google Play. If you
-don't send a confirmation message, Google Play will continue sending
-<code>IN_APP_NOTIFY</code> messages for the transactions you have not confirmed. Also,
-your application must be able to handle <code>IN_APP_NOTIFY</code> messages that contain multiple
-orders.</p>
-
-<p>In addition, as a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request
-for a purchased item until you have delivered the item to the user. This way, if your application
-crashes or something else prevents your application from delivering the product, your application
-will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
-that you need to deliver the product.</p>
-
-<h4>Restoring transaction information (RESTORE_TRANSACTIONS)</h4>
-
-<p>To restore a user's transaction information, you send a <code>RESTORE_TRANSACTIONS</code>
-request. You must specify four keys in the request {@link android.os.Bundle}. The following code
-sample shows how to set these keys and make the request. In the sample, <code>mService</code> is an
-instance of the <code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is RESTORE_TRANSACTIONS
-*/
- Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS");
- request.putLong(REQUEST_NONCE, mNonce);
- Bundle response = mService.sendBillingRequest(request);
- // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>REQUEST_NONCE</code>
-key is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
-must generate. The Google Play application returns this nonce with the transactions information
-contained in the <code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the
-integrity of the transaction information.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>RESTORE_TRANSACTIONS</code> request also triggers two asynchronous responses (broadcast
-intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
-which provides status and error information about the request. Next, if the request was successful,
-the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code> broadcast intent. This
-message contains the detailed transaction information. The transaction information is contained in a
-signed JSON string (unencrypted). The message includes the signature so you can verify the integrity
-of the signed string.</p>
-
-<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code>
-request type only when your application is installed for the first time on a device or when your
-application has been removed from a device and reinstalled.</p>
-
-<h3>Other service tasks</h3>
-
-<p>You may also want your {@link android.app.Service} to receive intent messages from your {@link
-android.content.BroadcastReceiver}. You can use these intent messages to convey the information that
-was sent asynchronously from the Google Play application to your {@link
-android.content.BroadcastReceiver}. To see an example of how you can send and receive these intent
-messages, see the <code>BillingReceiver.java</code> and <code>BillingService.java</code> files in
-the sample application. You can use these samples as a basis for your own implementation. However,
-if you use any of the code from the sample application, be sure you follow the guidelines in <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<h2 id="billing-broadcast-receiver">Creating a BroadcastReceiver</h2>
-
-<p>The Google Play application uses broadcast intents to send asynchronous billing responses to
-your application. To receive these intent messages, you need to create a {@link
-android.content.BroadcastReceiver} that can handle the following intents:</p>
-
-<ul>
- <li>com.android.vending.billing.RESPONSE_CODE
- <p>This broadcast intent contains a Google Play response code, and is sent after you make an
- in-app billing request. For more information about the response codes that are sent with this
- response, see <a
- href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Google Play Response
- Codes for In-app Billing</a>.</p>
- </li>
- <li>com.android.vending.billing.IN_APP_NOTIFY
- <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
- was canceled, or was refunded. For more information about notification messages, see <a
- href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
- Broadcast Intents</a></p>
- </li>
- <li>com.android.vending.billing.PURCHASE_STATE_CHANGED
- <p>This broadcast intent contains detailed information about one or more transactions. For more
- information about purchase state messages, see <a
- href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
- Broadcast Intents</a></p>
- </li>
-</ul>
-
-<p>Each of these broadcast intents provide intent extras, which your {@link
-android.content.BroadcastReceiver} must handle. The intent extras are listed in the following table
-(see table 1).</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Description of broadcast intent extras that are
-sent in response to billing requests.</p>
-
-<table>
-
-<tr>
-<th>Intent</th>
-<th>Extra</th>
-<th>Description</th>
-</tr>
-<tr>
- <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
- <td><code>request_id</code></td>
- <td>A <code>long</code> representing a request ID. A request ID identifies a specific billing
- request and is returned by Google Play at the time a request is made.</td>
-</tr>
-<tr>
- <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
- <td><code>response_code</code></td>
- <td>An <code>int</code> representing the actual Google Play server response code.</td>
-</tr>
-<tr>
- <td><code>com.android.vending.billing.IN_APP_NOTIFY</code></td>
- <td><code>notification_id</code></td>
- <td>A <code>String</code> representing the notification ID for a given purchase state change.
- Google Play notifies you when there is a purchase state change and the notification includes a
- unique notification ID. To get the details of the purchase state change, you send the notification
- ID with the <code>GET_PURCHASE_INFORMATION</code> request.</td>
-</tr>
-<tr>
- <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
- <td><code>inapp_signed_data</code></td>
- <td>A <code>String</code> representing the signed JSON string. The JSON string contains
- information about the billing transaction, such as order number, amount, and the item that was
- purchased or refunded.</td>
-</tr>
-<tr>
- <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
- <td><code>inapp_signature</code></td>
- <td>A <code>String</code> representing the signature of the JSON string.</td>
-</tr>
-</table>
-
-<p>The following code sample shows how to handle these broadcast intents and intent extras within a
-{@link android.content.BroadcastReceiver}. The BroadcastReceiver in this case is named
-<code>BillingReceiver</code>, just as it is in the sample application.</p>
-
-<pre>
-public class BillingReceiver extends BroadcastReceiver {
-
- private static final String TAG = "BillingReceiver";
-
- // Intent actions that we receive in the BillingReceiver from Google Play.
- // These are defined by Google Play and cannot be changed.
- // The sample application defines these in the Consts.java file.
- public static final String ACTION_NOTIFY = "com.android.vending.billing.IN_APP_NOTIFY";
- public static final String ACTION_RESPONSE_CODE = "com.android.vending.billing.RESPONSE_CODE";
- public static final String ACTION_PURCHASE_STATE_CHANGED =
- "com.android.vending.billing.PURCHASE_STATE_CHANGED";
-
- // The intent extras that are passed in an intent from Google Play.
- // These are defined by Google Play and cannot be changed.
- // The sample application defines these in the Consts.java file.
- public static final String NOTIFICATION_ID = "notification_id";
- public static final String INAPP_SIGNED_DATA = "inapp_signed_data";
- public static final String INAPP_SIGNATURE = "inapp_signature";
- public static final String INAPP_REQUEST_ID = "request_id";
- public static final String INAPP_RESPONSE_CODE = "response_code";
-
-
- &#64;Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (ACTION_PURCHASE_STATE_CHANGED.equals(action)) {
- String signedData = intent.getStringExtra(INAPP_SIGNED_DATA);
- String signature = intent.getStringExtra(INAPP_SIGNATURE);
- // Do something with the signedData and the signature.
- } else if (ACTION_NOTIFY.equals(action)) {
- String notifyId = intent.getStringExtra(NOTIFICATION_ID);
- // Do something with the notifyId.
- } else if (ACTION_RESPONSE_CODE.equals(action)) {
- long requestId = intent.getLongExtra(INAPP_REQUEST_ID, -1);
- int responseCodeIndex = intent.getIntExtra(INAPP_RESPONSE_CODE,
- ResponseCode.RESULT_ERROR.ordinal());
- // Do something with the requestId and the responseCodeIndex.
- } else {
- Log.w(TAG, "unexpected action: " + action);
- }
- }
- // Perform other processing here, such as forwarding intent messages to your local service.
-}
-</pre>
-
-<p>In addition to receiving broadcast intents from the Google Play application, your {@link
-android.content.BroadcastReceiver} must handle the information it received in the broadcast intents.
-Usually, your {@link android.content.BroadcastReceiver} does this by sending the information to a
-local service (discussed in the next section). The <code>BillingReceiver.java</code> file in the
-sample application shows you how to do this. You can use this sample as a basis for your own {@link
-android.content.BroadcastReceiver}. However, if you use any of the code from the sample application,
-be sure you follow the guidelines that are discussed in <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design </a>.</p>
-
-<h2 id="billing-signatures">Verifying Signatures and Nonces</h2>
-
-<p>Google Play's in-app billing service uses two mechanisms to help verify the integrity of the
-transaction information you receive from Google Play: nonces and signatures. A nonce (number used
-once) is a cryptographically secure number that your application generates and sends with every
-<code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
-returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, enabling you to verify that
-any given <code>PURCHASE_STATE_CHANGED</code> response corresponds to an actual request that you
-made. Every <code>PURCHASE_STATE_CHANGED</code> broadcast intent also includes a signed JSON string
-and a signature, which you can use to verify the integrity of the response.</p>
-
-<p>Your application must provide a way to generate, manage, and verify nonces. The following sample
-code shows some simple methods you can use to do this.</p>
-
-<pre>
- private static final SecureRandom RANDOM = new SecureRandom();
- private static HashSet&lt;Long&gt; sKnownNonces = new HashSet&lt;Long&gt;();
-
- public static long generateNonce() {
- long nonce = RANDOM.nextLong();
- sKnownNonces.add(nonce);
- return nonce;
- }
-
- public static void removeNonce(long nonce) {
- sKnownNonces.remove(nonce);
- }
-
- public static boolean isNonceKnown(long nonce) {
- return sKnownNonces.contains(nonce);
- }
-</pre>
-
-<p>Your application must also provide a way to verify the signatures that accompany every
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent. The <code>Security.java</code> file in the
-sample application shows you how to do this. If you use this file as a basis for your own security
-implementation, be sure to follow the guidelines in <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a> and
-obfuscate your code.</p>
-
-<p>You will need to use your Google Play public key to perform the signature verification. The
-following procedure shows you how to retrieve Base64-encoded public key from the Google Play
-publisher site.</p>
-
-<ol>
- <li>Log in to your <a href="http://play.google.com/apps/publish">publisher account</a>.</li>
- <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
- <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
- 2).</li>
- <li>Copy your public key.</li>
-</ol>
-
-<p class="caution"><strong>Important</strong>: To keep your public key safe from malicious users and
-hackers, do not embed your public key as an entire literal string. Instead, construct the string at
-runtime from pieces or use bit manipulation (for example, XOR with some other string) to hide the
-actual key. The key itself is not secret information, but you do not want to make it easy for a
-hacker or malicious user to replace the public key with another key.</p>
-
-<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure2" />
-<p class="img-caption">
- <strong>Figure 2.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
- page lets you see your public key.
-</p>
-
-<h2 id="billing-implement">Modifying Your Application Code</h2>
-
-<p>After you finish adding in-app billing components to your project, you are ready to modify your
-application's code. For a typical implementation, like the one that is demonstrated in the sample
-application, this means you need to write code to do the following: </p>
-
-<ul>
- <li>Create a storage mechanism for storing users' purchase information.</li>
- <li>Create a user interface that lets users select items for purchase.</li>
-</ul>
-
-<p>The sample code in <code>Dungeons.java</code> shows you how to do both of these tasks.</p>
-
-<h3>Creating a storage mechanism for storing purchase information</h3>
-
-<p>You must set up a database or some other mechanism for storing users' purchase information. The
-sample application provides an example database (PurchaseDatabase.java); however, the example
-database has been simplified for clarity and does not exhibit the security best practices that we
-recommend. If you have a remote server, we recommend that you store purchase information on your
-server instead of in a local database on a device. For more information about security best
-practices, see <a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
-Design</a>.</p>
-
-<p class="note"><strong>Note</strong>: If you store any purchase information on a device, be sure to
-encrypt the data and use a device-specific encryption key. Also, if the purchase type for any of
-your items is "unmanaged," we recommend that you back up the purchase information for these items to
-a remote server or use Android's <a href="{@docRoot}guide/topics/data/backup.html">data
-backup</a> framework to back up the purchase information. Backing up purchase information for
-unmanaged items is important because unmanaged items cannot be restored by using the
-<code>RESTORE_TRANSACTIONS</code> request type.</p>
-
-<h3>Creating a user interface for selecting items</h3>
-
-<p>You must provide users with a means for selecting items that they want to purchase. Google
-Play provides the checkout user interface (which is where the user provides a form of payment and
-approves the purchase), but your application must provide a control (widget) that invokes the
-<code>sendBillingRequest()</code> method when a user selects an item for purchase.</p>
-
-<p>You can render the control and trigger the <code>sendBillingRequest()</code> method any way you
-want. The sample application uses a spinner widget and a button to present items to a user and
-trigger a billing request (see <code>Dungeons.java</code>). The user interface also shows a list of
-recently purchased items.</p>
-
diff --git a/docs/html/guide/google/play/billing/billing_overview.jd b/docs/html/guide/google/play/billing/billing_overview.jd
deleted file mode 100755
index 82f6cf4..0000000
--- a/docs/html/guide/google/play/billing/billing_overview.jd
+++ /dev/null
@@ -1,508 +0,0 @@
-page.title=In-app Billing Overview
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-types">Product and Purchase Types</a></li>
- <li><a href="#billing-arch">In-app Billing Architecture</a></li>
- <li><a href="#billing-msgs">In-app Billing Messages</a></li>
- <ol>
- <li><a href="#billing-request">Request messages</a></li>
- <li><a href="#billing-response">Broadcast intents</a></li>
- <li><a href="#billing-message-sequence">Messaging sequence</a></li>
- <li><a href="#billing-action-notify">Handling IN_APP_NOTIFY messages</a></li>
- </ol>
- <li><a href="#billing-security">Security Controls</a></li>
- <li><a href="#billing-limitations">Requirements and Limitations</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>In-app Billing is a Google Play service that provides checkout processing for
-in-app purchases. To use the service, your application sends a billing request for a specific in-app
-product. The service then handles all of the checkout details for the transaction, including
-requesting and validating the form of payment and processing the financial transaction. When the
-checkout process is complete, the service sends your application the purchase details, such as the
-order number, the order date and time, and the price paid. At no point does your application have to
-handle any financial transactions; that role is provided by Google Play's in-app billing
-service.</p>
-
-<h2 id="billing-types">Product and Purchase Types</h2>
-
-<p>In-app Billing supports different product types and purchase types to give you flexibility in how you monetize your app. In all cases, you define your products using the Google Play Developer Console, including product type, purchase type, SKU, price, description, and so on. For more information, see <a href="billing_admin.html">Administering In-app Billing</a>.</p>
-
-<h3 id="producttypes">Product Types</h3>
-
-<p>With In-app Billing, you can sell two types of products &mdash; <em>in-app products</em> and <em>subscriptions</em>. The billing characteristics of the two types are very different, but the In-app Billing API lets you handle the two product types in your app using the same communication model, data structures, and user interactions, as described later in this document.</p>
-
-<ul>
-<li><em>In-app products</em> &mdash; Items that a user would purchase one-at-a-time. For example, typical in-app products would let users purchase digital content, unlock functionality in an app, pay for one-time charges, or add almost anything to the application experience. Unlike with priced applications, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly.
-
-<p>In-app products can be sold using either the "managed per user account" or "unmanaged" purchase type. In-app products are always explicitly associated with one and only one app. That is, one app cannot purchase an in-app product published for another app, even if they are from the same developer. In-app products are supported in all versions of In-app Billing.</p></li>
-
-<li><em>Subscriptions</em> &mdash; Items that are sold with a developer-specified, recurring billing interval. When a user purchases a subscription, Google Play and its payment processor automatically bill the user's account at the specified interval and price, charging the amount to the original payment method. Once the user purchases a subscription, Google Play continues billing the account indefinitely, without requiring approval or action from the user. The user can cancel the subscription at any time.
-
-<p>Subscriptions can only be sold using the "managed per user account" purchase type. As with in-app products, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly. For more information about subscriptions and how to sell them in your apps, see the <a href="billing_subscriptions.html">Subscriptions</a> document.</p></li>
-</ul>
-
-<h3 id="purchasetypes">Purchase Types</h3>
-
-<p>In-app Billing offers two purchase types that you can use when selling in-app products, "managed per user account" and "unmanaged". The purchase type controls how Google Play handles and tracks purchases for the products. </p>
-
-<ul>
-<li><em>Managed per user account</em> &mdash; Items that can be purchased only once per user account on Google Play. When a user purchases an item that uses the "managed per user account" purchase type, Google Play permanently stores the transaction information for each item on a per-user basis. This enables you to later query Google Play to restore the state of the items a specific user has purchased. If a user attempts to purchase a managed item that has already been purchased, Google Play prevents the user from purchasing the item again and displays an "Item already purchased" error.
-
-<p>The "managed per user account" purchase type is useful if you are selling items such as game levels or application features. These items are not transient and usually need to be restored whenever a user reinstalls your application, wipes the data on their device, or installs your application on a new device.</p>
-
-<li><em>Unmanaged</em> &mdash; Items that do not have their transaction information stored on Google Play. This means that you cannot later query Google Play to retrieve transaction information for those items. For "unmanaged" purchases, you are responsible for managing the transaction information. Also, Google Play does not attempt to prevent the user from purchasing an item multiple times if it uses the "unmanaged" purchase type. It's up to you to control how many times an unmanaged item can be purchased.</p>
-
-<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or magic spells. These items are consumed within your application and are usually purchased multiple times.</p></li>
-</ul>
-
-<h2 id="billing-arch">In-app Billing Architecture</h2>
-
-<p>Your app accesses the In-app Billing service using an API that is exposed by
-the Google Play app installed on the device. The Google Play app then uses an
-asynchronous message loop to convey billing requests and responses between your
-application and the Google Play server. In practice, your application never
-directly communicates with the Google Play server (see figure 1). Instead, your
-application sends billing requests to the Google Play application over
-interprocess communication (IPC) and receives purchase responses from the Google
-Play application in the form of asynchronous broadcast intents. Your application
-does not manage any network connections between itself and the Google Play
-server or use any special APIs from the Android platform.</p>
-
-<div class="figure" style="width:440px">
-<img src="{@docRoot}images/billing_arch.png" alt="" height="582" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Your application sends and receives billing messages through the
- Google Play application, which handles all communication with the Google Play server.</p>
-</div>
-
-<p>Some in-app billing implementations may also use a private remote server to deliver content or
-validate transactions, but a remote server is not required to implement in-app billing. A remote
-server can be useful if you are selling digital content that needs to be delivered to a user's
-device, such as media files or photos. You might also use a remote server to store users'
-transaction history or perform various in-app billing security tasks, such as signature
-verification. Although you can handle all security-related tasks in your application, performing
-those tasks on a remote server is recommended because it helps make your application less vulnerable
-to security attacks.</p>
-
-<p>A typical in-app billing implementation relies on three components:</p>
-<ul>
- <li>A {@link android.app.Service} (named <code>BillingService</code> in the sample application),
- which processes purchase messages from the application and sends billing requests to the Google
- Play in-app billing service.</li>
- <li>A {@link android.content.BroadcastReceiver} (named <code>BillingReceiver</code> in the sample
- application), which receives all asynchronous billing responses from the Google Play
- application.</li>
- <li>A security component (named <code>Security</code> in the sample application), which performs
- security-related tasks, such as signature verification and nonce generation. For more information
- about in-app billing security, see <a href="#billing-security">Security controls</a> later in this
- document.</li>
-</ul>
-
-<p>You may also want to incorporate two other components to support in-app billing:</p>
-<ul>
- <li>A response {@link android.os.Handler} (named <code>ResponseHandler</code> in the sample
- application), which provides application-specific processing of purchase notifications, errors,
- and other status messages.</li>
- <li>An observer (named <code>PurchaseObserver</code> in the sample application), which is
- responsible for sending callbacks to your application so you can update your user interface with
- purchase information and status.</li>
-</ul>
-
-<p>In addition to these components, your application must provide a way to store information about
-users' purchases and some sort of user interface that lets users select items to purchase. You do
-not need to provide a checkout user interface. When a user initiates an in-app purchase, the Google
-Play application presents the checkout user interface to your user. When the user completes the
-checkout process, your application resumes.</p>
-
-<h2 id="billing-msgs">In-app Billing Messages</h2>
-
-<p>When the user initiates a purchase, your application sends billing messages to Google Play's
-in-app billing service (named <code>MarketBillingService</code>) using simple IPC method calls. The
-Google Play application responds to all billing requests synchronously, providing your
-application with status notifications and other information. The Google Play application also
-responds to some billing requests asynchronously, providing your application with error messages and
-detailed transaction information. The following section describes the basic request-response
-messaging that takes place between your application and the Google Play application.</p>
-
-<h3 id="billing-request">In-app billing requests</h3>
-
-<p>Your application sends in-app billing requests by invoking a single IPC method
-(<code>sendBillingRequest()</code>), which is exposed by the <code>MarketBillingService</code>
-interface. This interface is defined in an <a
-href="{@docRoot}guide/components/aidl.html">Android Interface Definition Language</a> file
-(<code>IMarketBillingService.aidl</code>). You can <a
-href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">download</a> this AIDL
-file with the in-app billing sample application.</p>
-
-<p>The <code>sendBillingRequest()</code> method has a single {@link android.os.Bundle} parameter.
-The Bundle that you deliver must include several key-value pairs that specify various parameters for
-the request, such as the type of billing request you are making, the item that is being purchased and
-its type, and the application that is making the request. For more information about the Bundle keys
-that are sent with a request, see <a
-href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
-Service Interface</a>.
-
-<p>One of the most important keys that every request Bundle must have is the
-<code>BILLING_REQUEST</code> key. This key lets you specify the type of billing request you are
-making. Google Play's in-app billing service supports the following five types of billing
-requests:</p>
-
-<ul>
- <li><code>CHECK_BILLING_SUPPORTED</code>
- <p>This request verifies that the Google Play application supports in-app billing. You
- usually send this request when your application first starts up. This request is useful if you
- want to enable or disable certain UI features that are relevant only to in-app billing.</p>
- </li>
- <li><code>REQUEST_PURCHASE</code>
- <p>This request sends a purchase message to the Google Play application and is the foundation
- of in-app billing. You send this request when a user indicates that he or she wants to purchase
- an item in your application. Google Play then handles the financial transaction by displaying
- the checkout user interface.</p>
- </li>
- <li><code>GET_PURCHASE_INFORMATION</code>
- <p>This request retrieves the details of a purchase state change. A purchase changes state when
- a requested purchase is billed successfully or when a user cancels a transaction during
- checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
- application when a purchase changes state, so you only need to send this request when there is
- transaction information to retrieve.</p>
- </li>
- <li><code>CONFIRM_NOTIFICATIONS</code>
- <p>This request acknowledges that your application received the details of a purchase state
- change. Google Play sends purchase state change notifications to your application until you
- confirm that you received them.</p>
- </li>
- <li><code>RESTORE_TRANSACTIONS</code>
- <p>This request retrieves a user's transaction status for <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
- purchases</a> and <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">subscriptions</a>.
- You should send this request only when you need to retrieve a user's transaction
- status, which is usually only when your application is reinstalled or installed for the first
- time on a device.</p>
- </li>
-</ul>
-
-<h3 id="billing-response">In-app Billing Responses</h3>
-
-<p>The Google Play application responds to in-app billing requests with both synchronous and
-asynchronous responses. The synchronous response is a {@link android.os.Bundle} with the following
-three keys:</p>
-
-<ul>
- <li><code>RESPONSE_CODE</code>
- <p>This key provides status information and error information about a request.</p>
- </li>
- <li><code>PURCHASE_INTENT</code>
- <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
- activity.</p>
- </li>
- <li><code>REQUEST_ID</code>
- <p>This key provides you with a request identifier, which you can use to match asynchronous
- responses with requests.</p>
- </li>
-</ul>
-<p>Some of these keys are not relevant to every request. For more information, see <a
-href="#billing-message-sequence">Messaging sequence</a> later in this document.</p>
-
-<p>The asynchronous response messages are sent in the form of individual broadcast intents and
-include the following:</p>
-
-<ul>
- <li><code>com.android.vending.billing.RESPONSE_CODE</code>
- <p>This response contains a Google Play server response code, and is sent after you make an
- in-app billing request. A server response code can indicate that a billing request was
- successfully sent to Google Play or it can indicate that some error occurred during a billing
- request. This response is <em>not</em> used to report any purchase state changes (such as refund
- or purchase information). For more information about the response codes that are sent with this
- response, see <a
- href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Server Response Codes
- for In-app Billing</a>.</p>
- </li>
- <li><code>com.android.vending.billing.IN_APP_NOTIFY</code>
- <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
- was canceled, or was refunded. This response contains one or more notification IDs. Each
- notification ID corresponds to a specific server-side message, and each messages contains
- information about one or more transactions. After your application receives an
- <code>IN_APP_NOTIFY</code> broadcast intent, you send a <code>GET_PURCHASE_INFORMATION</code>
- request with the notification IDs to retrieve message details.</p>
- </li>
- <li><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code>
- <p>This response contains detailed information about one or more transactions. The transaction
- information is contained in a JSON string. The JSON string is signed and the signature is sent
- to your application along with the JSON string (unencrypted). To help ensure the security of
- your in-app billing messages, your application can verify the signature of this JSON string.</p>
- </li>
-</ul>
-
-<p>The JSON string that is returned with the <code>PURCHASE_STATE_CHANGED</code> intent provides
-your application with the details of one or more billing transactions. An example of this JSON
-string for a subscription item is shown below:</p>
-<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
- "orders" :
- [{ "notificationId" : "android.test.purchased",
- "orderId" : "transactionId.android.test.purchased",
- "packageName" : "com.example.dungeons",
- "productId" : "android.test.purchased",
- "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
- "purchaseTime" : 1290114783411,
- "purchaseState" : 0,
- "purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
-}
-</pre>
-
-<p>For more information about the fields in this JSON string, see <a
-href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
-Broadcast Intents</a>.</p>
-
-<h3 id="billing-message-sequence">Messaging sequence</h3>
-
-<p>The messaging sequence for a typical purchase request is shown in figure 2. Request types for
-each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
-are shown in <em>italic</em>. For clarity, figure 2 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<p>The basic message sequence for an in-app purchase request is as follows:</p>
-
-<ol>
- <li>Your application sends a purchase request (<code>REQUEST_PURCHASE</code> type), specifying a
- product ID and other parameters.</li>
- <li>The Google Play application sends your application a Bundle with the following keys:
- <code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
- <code>PURCHASE_INTENT</code> key provides a {@link android.app.PendingIntent}, which your
- application uses to start the checkout UI for the given product ID.</li>
- <li>Your application launches the pending intent, which launches the checkout UI.
- <p class="note"><strong>Note:</strong> You must launch the pending intent from an activity
- context and not an application context.</p>
- </li>
- <li>When the checkout flow finishes (that is, the user successfully purchases the item or cancels
- the purchase), Google Play sends your application a notification message (an
- <code>IN_APP_NOTIFY</code> broadcast intent). The notification message includes a notification ID,
- which references the transaction.</li>
- <li>Your application requests the transaction information by sending a
- <code>GET_PURCHASE_STATE_CHANGED</code> request, specifying the notification ID for the
- transaction.</li>
- <li>The Google Play application sends a Bundle with a <code>RESPONSE_CODE</code> key and a
- <code>REQUEST_ID</code> key.
- <li>Google Play sends the transaction information to your application in a
- <code>PURCHASE_STATE_CHANGED</code> broadcast intent.</li>
- <li>Your application confirms that you received the transaction information for the given
- notification ID by sending a confirmation message (<code>CONFIRM_NOTIFICATIONS</code> type),
- specifying the notification ID for which you received transaction information.</li>
- <li>The Google Play application sends your application a Bundle with a
- <code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_request_purchase.png" height="231" id="figure2" />
-<p class="img-caption">
- <strong>Figure 2.</strong> Message sequence for a purchase request.
-</p>
-
-<p>Keep in mind, you must send a confirmation when you receive transaction information from Google
-Play (step 8 in figure 2). If you don't send a confirmation message, Google Play will
-continue sending <code>IN_APP_NOTIFY</code> messages for the transactions you have not
-confirmed. As a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request for
-a purchased item until you have delivered the item to the user. This way, if your application
-crashes or something else prevents your application from delivering the product, your application
-will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
-that you need to deliver the product. Also, as a best practice, your application must be able to
-handle <code>IN_APP_NOTIFY</code> messages that contain multiple orders.</p>
-
-<p>The messaging sequence for a restore transaction request is shown in figure 3. Request types for
-each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
-are shown in <em>italic</em>. For clarity, figure 3 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<div class="figure" style="width:490px">
-<img src="{@docRoot}images/billing_restore_transactions.png" alt="" height="168" />
-<p class="img-caption">
- <strong>Figure 3.</strong> Message sequence for a restore transactions request.
-</p>
-</div>
-
-<p>The request triggers three responses. The first is a {@link android.os.Bundle} with a
-<code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key. Next, the Google Play
-application sends a <code>RESPONSE_CODE</code> broadcast intent, which provides status information
-or error information about the request. As always, the <code>RESPONSE_CODE</code> message references
-a specific request ID, so you can determine which request a <code>RESPONSE_CODE</code> message
-pertains to.</p>
-
-<p>The <code>RESTORE_TRANSACTIONS</code> request type also triggers a
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the same type of transaction
-information that is sent during a purchase request. Unlike with a purchase request, however, the transactions
-are given without any associated notification IDs, so you do not need to respond to this
-intent with a <code>CONFIRM_NOTIFICATIONS</code> message. </p>
-
-<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code> request
-type only when your application is installed for the first time on a device or when your
-application has been removed from a device and reinstalled.</p>
-
-<p>The messaging sequence for checking whether in-app billing is supported is shown in figure 4. The
-request type for the <code>sendBillingRequest()</code> method is shown in <strong>bold</strong>.</p>
-
-<div class="figure" style="width:454px">
-<img src="{@docRoot}images/billing_check_supported.png" alt="" height="168" />
-<p class="img-caption">
- <strong>Figure 4.</strong> Message sequence for checking whether in-app billing is supported.
-</p>
-</div>
-
-<p>The synchronous response for a <code>CHECK_BILLING_SUPPORTED</code> request provides a Bundle
-with a server response code. A <code>RESULT_OK</code> response code indicates that in-app billing
-is supported; a <code>RESULT_BILLING_UNAVAILABLE</code> response code indicates that in-app billing
-is unavailable because the API version you specified is unrecognized or the user is not eligible to
-make in-app purchases (for example, the user resides in a country that does not allow in-app
-billing). A <code>SERVER_ERROR</code> can also be returned, indicating that there was a problem with
-the Google Play server.</p>
-
-<h3 id="billing-action-notify">Handling IN_APP_NOTIFY messages</h3>
-
-<p>Usually, your application receives an <code>IN_APP_NOTIFY</code> broadcast intent from Google
-Play in response to a <code>REQUEST_PURCHASE</code> message (see figure 2). The
-<code>IN_APP_NOTIFY</code> broadcast intent informs your application that the state of a requested
-purchase has changed. To retrieve the details of that purchase, your application sends a
-<code>GET_PURCHASE_INFORMATION</code> request. Google Play responds with a
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the details of the purchase
-state change. Your application then sends a <code>CONFIRM_NOTIFICATIONS</code> message, informing
-Google Play that you have received the purchase state change information.</p>
-
-<p>In some special cases, you may receive multiple <code>IN_APP_NOTIFY</code> messages even though
-you have confirmed receipt of the purchase information, or you may receive
-<code>IN_APP_NOTIFY</code> messages for a purchase change even though you never initiated the
-purchase. Your application must handle both of these special cases.</p>
-
-<h4>Handling multiple IN_APP_NOTIFY messages</h4>
-
-<p>When Google Play receives a <code>CONFIRM_NOTIFICATIONS</code> message for a given
-<code>PURCHASE_STATE_CHANGED</code> message, it usually stops sending <code>IN_APP_NOTIFY</code>
-intents for that <code>PURCHASE_STATE_CHANGED</code> message. Sometimes, however, Google
-Play may send repeated <code>IN_APP_NOTIFY</code> intents for a
-<code>PURCHASE_STATE_CHANGED</code> message even though your application has sent a
-<code>CONFIRM_NOTIFICATIONS</code> message. This can occur if a device loses network connectivity
-while you are sending the <code>CONFIRM_NOTIFICATIONS</code> message. In this case, Google Play
-might not receive your <code>CONFIRM_NOTIFICATIONS</code> message and it could send multiple
-<code>IN_APP_NOTIFY</code> messages until it receives acknowledgement that you received the
-transaction message. Therefore, your application must be able to recognize that the subsequent
-<code>IN_APP_NOTIFY</code> messages are for a previously processed transaction. You can do this by
-checking the <code>orderID</code> that's contained in the JSON string because every transaction has
-a unique <code>orderId</code>.</p>
-
-<h4>Handling refunds and other unsolicited IN_APP_NOTIFY messages</h4>
-
-<p>There are two cases where your application may receive <code>IN_APP_NOTIFY</code> broadcast
-intents even though your application has not sent a <code>REQUEST_PURCHASE</code> message. Figure 5
-shows the messaging sequence for both of these cases. Request types for each
-<code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents are
-shown in <em>italic</em>. For clarity, figure 5 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<div class="figure" style="width:481px">
-<img src="{@docRoot}images/billing_refund.png" alt="" height="189" />
-<p class="img-caption">
- <strong>Figure 5.</strong> Message sequence for refunds and other unsolicited
-IN_APP_NOTIFY messages.</p>
-</div>
-
-<p>In the first case, your application may receive an <code>IN_APP_NOTIFY</code> broadcast intent
-when a user has your application installed on two (or more) devices and the user makes an in-app
-purchase from one of the devices. In this case, Google Play sends an <code>IN_APP_NOTIFY</code>
-message to the second device, informing the application that there is a purchase state change. Your
-application can handle this message the same way it handles the response from an
-application-initiated <code>REQUEST_PURCHASE</code> message, so that ultimately your application
-receives a <code>PURCHASE_STATE_CHANGED</code> broadcast intent message that includes information
-about the item that has been purchased. This applies only to items that have their <a
-href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">purchase type</a> set
-to "managed per user account."</p>
-
-<p>In the second case, your application can receive an <code>IN_APP_NOTIFY</code> broadcast intent
-when Google Play receives a refund notification from Google Wallet. In this case, Google
-Play sends an <code>IN_APP_NOTIFY</code> message to your application. Your application can handle
-this message the same way it handles responses from an application-initiated
-<code>REQUEST_PURCHASE</code> message so that ultimately your application receives a
-<code>PURCHASE_STATE_CHANGED</code> message that includes information about the item that has been
-refunded. The refund information is included in the JSON string that accompanies the
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent. Also, the <code>purchaseState</code> field in
-the JSON string is set to 2.</p>
-
-<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to
-issue refunds or cancel in-app billing transactions. You must do this manually through your
-Google Wallet merchant account. However, you can use the Google Wallet API to retrieve order
-information.</p>
-
-<h2 id="billing-security">Security Controls</h2>
-
-<p>To help ensure the integrity of the transaction information that is sent to your application,
-Google Play signs the JSON string that is contained in the <code>PURCHASE_STATE_CHANGED</code>
-broadcast intent. Google Play uses the private key that is associated with your publisher account
-to create this signature. The publisher site generates an RSA key pair for each publisher account.
-You can find the public key portion of this key pair on your account's profile page. It is the same
-public key that is used with Google Play licensing.</p>
-
-<p>When Google Play signs a billing response, it includes the signed JSON string (unencrypted)
-and the signature. When your application receives this signed response you can use the public key
-portion of your RSA key pair to verify the signature. By performing signature verification you can
-help detect responses that have been tampered with or that have been spoofed. You can perform this
-signature verification step in your application; however, if your application connects to a secure
-remote server then we recommend that you perform the signature verification on that server.</p>
-
-<p>In-app billing also uses nonces (a random number used once) to help verify the integrity of the
-purchase information that's returned from Google Play. Your application must generate a nonce and
-send it with a <code>GET_PURCHASE_INFORMATION</code> request and a <code>RESTORE_TRANSACTIONS</code>
-request. When Google Play receives the request, it adds the nonce to the JSON string that
-contains the transaction information. The JSON string is then signed and returned to your
-application. When your application receives the JSON string, you need to verify the nonce as well as
-the signature of the JSON string.</p>
-
-<p>For more information about best practices for security and design, see <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<h2 id="billing-limitations">In-app Billing Requirements and Limitations</h2>
-
-<p>Before you get started with in-app billing, be sure to review the following requirements and
-limitations.</p>
-
-<ul>
- <li>In-app billing can be implemented only in applications that you publish through Google
- Play.</li>
- <li>You must have a Google Wallet Merchant account to use Google Play In-app Billing.</li>
- <li>In-app billing requires version 2.3.4 (or higher) of the Android Market application.
- To support subscriptions, version 3.5 or higher of the Google Play app is required. On devices
- running Android 3.0, version 5.0.12 (or higher) of the MyApps application is required.</li>
- <li>An application can use in-app billing only if the device is running Android 1.6 (API level 4)
- or higher.</li>
- <li>You can use in-app billing to sell only digital content. You cannot use in-app billing to sell
- physical goods, personal services, or anything that requires physical delivery.</li>
- <li>Google Play does not provide any form of content delivery. You are responsible for
- delivering the digital content that you sell in your applications.</li>
- <li>You cannot implement in-app billing on a device that never connects to the network. To
- complete in-app purchase requests, a device must be able to access the Google Play server over
- the network. </li>
-</ul>
-
-<p>For more information about in-app billing requirements, see <a
-href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153481">In-App
-Billing Availability and Policies</a>.</p>
diff --git a/docs/html/guide/google/play/billing/billing_reference.jd b/docs/html/guide/google/play/billing/billing_reference.jd
deleted file mode 100755
index c5541fa..0000000
--- a/docs/html/guide/google/play/billing/billing_reference.jd
+++ /dev/null
@@ -1,489 +0,0 @@
-page.title=In-app Billing Reference
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-codes">Server Response Codes for In-app Billing</a></li>
- <li><a href="#billing-interface">In-app Billing Service Interface</a></li>
- <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
- <li><a href="#other-intents">Other Broadcast Intents</a></li>
- <li><a href="#billing-versions">In-app Billing API Versions</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- </ol>
-</div>
-</div>
-
-<p>The following document provides technical reference information for the following:</p>
-
-<ul>
- <li><a href="#billing-codes">Google Play Server Response Codes for In-app Billing</a></li>
- <li><a href="#billing-interface">In-app Billing Interface Parameters</a></li>
- <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
- <li><a href="#other-intents">Other Intents</a></li>
- <li><a href="#billing-versions">In-app Billing API Versions</a></li>
-</ul>
-
-<h2 id="billing-codes">Server Response Codes for In-app Billing</h2>
-
-<p>The following table lists all of the server response codes that are sent from Google Play to
-your application. Google Play sends these response codes asynchronously as
-<code>response_code</code> extras in the <code>com.android.vending.billing.RESPONSE_CODE</code>
-broadcast intent. Your application must handle all of these response codes.</p>
-
-<p class="table-caption" id="response-codes-table"><strong>Table 1.</strong> Summary of response
-codes returned by Google Play.</p>
-
-<table>
-
-<tr>
-<th>Response Code</th>
-<th>Value</th>
-<th>Description</th>
-</tr>
-<tr>
- <td><code>RESULT_OK</code></td>
- <td>0</td>
- <td>Indicates that the request was sent to the server successfully. When this code is returned in
- response to a <code>CHECK_BILLING_SUPPORTED</code> request, indicates that billing is
- supported.</td>
-</tr>
-<tr>
- <td><code>RESULT_USER_CANCELED</code></td>
- <td>1</td>
- <td>Indicates that the user pressed the back button on the checkout page instead of buying the
- item.</td>
-</tr>
-<tr>
- <td><code>RESULT_SERVICE_UNAVAILABLE</code></td>
- <td>2</td>
- <td>Indicates that the network connection is down.</td>
-</tr>
-<tr>
- <td><code>RESULT_BILLING_UNAVAILABLE</code></td>
- <td>3</td>
- <td>Indicates that in-app billing is not available because the <code>API_VERSION</code> that you
- specified is not recognized by the Google Play application or the user is ineligible for in-app
- billing (for example, the user resides in a country that prohibits in-app purchases).</td>
-</tr>
-<tr>
- <td><code>RESULT_ITEM_UNAVAILABLE</code></td>
- <td>4</td>
- <td>Indicates that Google Play cannot find the requested item in the application's product
- list. This can happen if the product ID is misspelled in your <code>REQUEST_PURCHASE</code>
- request or if an item is unpublished in the application's product list.</td>
-</tr>
-<tr>
- <td><code>RESULT_DEVELOPER_ERROR</code></td>
- <td>5</td>
- <td>Indicates that an application is trying to make an in-app billing request but the application
- has not declared the com.android.vending.BILLING permission in its manifest. Can also indicate
- that an application is not properly signed, or that you sent a malformed request, such as a
- request with missing Bundle keys or a request that uses an unrecognized request type.</td>
-</tr>
-<tr>
- <td><code>RESULT_ERROR</code></td>
- <td>6</td>
- <td>Indicates an unexpected server error. For example, this error is triggered if you try to
-purchase an item from yourself, which is not allowed by Google Wallet.</td>
-</tr>
-</table>
-
-<h2 id="billing-interface">In-app Billing Service Interface</h2>
-
-<p>The following section describes the interface for Google Play's in-app billing service. The
-interface is defined in the <code>IMarketBillingService.aidl</code> file, which is included with the
-in-app billing <a
-href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
-application</a>.</p>
-<p>The interface consists of a single request method <code>sendBillingRequest()</code>. This method
-takes a single {@link android.os.Bundle} parameter. The Bundle parameter includes several key-value
-pairs, which are summarized in table 2.</p>
-
-<p class="table-caption"><strong>Table 2.</strong> Description of Bundle keys passed in a
-<code>sendBillingRequest()</code> request.</p>
-
-<table>
-
-<tr>
-<th>Key</th>
-<th>Type</th>
-<th>Possible Values</th>
-<th>Required?</th>
-<th>Description</th>
-</tr>
-<tr>
- <td><code>BILLING_REQUEST</code></td>
- <td><code>String</code></td>
- <td><code>CHECK_BILLING_SUPPORTED</code>, <code>REQUEST_PURCHASE</code>,
- <code>GET_PURCHASE_INFORMATION</code>, <code>CONFIRM_NOTIFICATIONS</code>, or
- <code>RESTORE_TRANSACTIONS</code></td>
- <td>Yes</td>
- <td>The type of billing request you are making with the <code>sendBillingRequest()</code> request.
- The possible values are discussed more below this table.</td>
-</tr>
-<tr>
- <td><code>API_VERSION</code></td>
- <td><code>int</code></td>
- <td> <ul>
- <li><code>"2"</code> [<a href="#version_2">details</a>]</li>
- <li><code>"1"</code> [<a href="#version_1">details</a>]</li>
- </ul></td>
- <td>Yes</td>
- <td>The version of Google Play's in-app billing service you want to use. The current version is
- 2.</td>
-</tr>
-<tr>
- <td><code>PACKAGE_NAME</code></td>
- <td><code>String</code></td>
- <td>A valid package name.</td>
- <td>Yes</td>
- <td>The name of the application that is making the request.</td>
-</tr>
-<tr>
- <td><code>ITEM_ID</code></td>
- <td><code>String</code></td>
- <td>Any valid product identifier.</td>
- <td>Required for <code>REQUEST_PURCHASE</code> requests.</td>
- <td>The product ID of the item you are making a billing request for. Every in-app item that you
- sell using Google Play's in-app billing service must have a unique product ID, which you
- specify on the Google Play publisher site.</td>
-</tr>
-<tr>
- <td><code>NONCE</code></td>
- <td><code>long</code></td>
- <td>Any valid <code>long</code> value.</td>
- <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code>
- requests.</td>
- <td>A number used once. Your application must generate and send a nonce with each
- <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
- returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, so you can use this value
- to verify the integrity of transaction responses form Google Play.</td>
-</tr>
-<tr>
- <td><code>NOTIFY_IDS</code></td>
- <td>Array of <code>long</code> values</td>
- <td>Any valid array of <code>long</code> values</td>
- <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>CONFIRM_NOTIFICATIONS</code>
- requests.</td>
- <td>An array of notification identifiers. A notification ID is sent to your application in an
- <code>IN_APP_NOTIFY</code> broadcast intent every time a purchase changes state. You use the
- notification to retrieve the details of the purchase state change.</td>
-</tr>
-<tr>
- <td><code>DEVELOPER_PAYLOAD</code></td>
- <td><code>String</code></td>
- <td>Any valid <code>String</code> less than 256 characters long.</td>
- <td>No</td>
- <td>A developer-specified string that can be specified when you make a
- <code>REQUEST_PURCHASE</code> request. This field is returned in the JSON string that contains
- transaction information for an order. You can use this key to send supplemental information with
- an order. For example, you can use this key to send index keys with an order, which is useful if
- you are using a database to store purchase information. We recommend that you do not use this key
- to send data or content.</td>
-</tr>
-</table>
-
-<p>The <code>BILLING_REQUEST</code> key can have the following values:</p>
-
-<ul>
- <li><code>CHECK_BILLING_SUPPORTED</code>
- <p>This request verifies that the Google Play application supports in-app billing. You
- usually send this request when your application first starts up. This request is useful if you
- want to enable or disable certain UI features that are relevant only to in-app billing.</p>
- </li>
- <li><code>REQUEST_PURCHASE</code>
- <p>This request sends a purchase message to the Google Play application and is the foundation
- of in-app billing. You send this request when a user indicates that he or she wants to purchase
- an item in your application. Google Play then handles the financial transaction by displaying
- the checkout user interface.</p>
- </li>
- <li><code>GET_PURCHASE_INFORMATION</code>
- <p>This request retrieves the details of a purchase state change. A purchase state change can
- occur when a purchase request is billed successfully or when a user cancels a transaction during
- checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
- application when a purchase changes state, so you only need to send this request when there is
- transaction information to retrieve.</p>
- </li>
- <li><code>CONFIRM_NOTIFICATIONS</code>
- <p>This request acknowledges that your application received the details of a purchase state
- change. That is, this message confirms that you sent a <code>GET_PURCHASE_INFORMATION</code>
- request for a given notification and that you received the purchase information for the
- notification.</p>
- </li>
- <li><code>RESTORE_TRANSACTIONS</code>
- <p>This request retrieves a user's transaction status for managed purchases (see <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">Choosing a
- Purchase Type</a> for more information). You should send this message only when you need to
- retrieve a user's transaction status, which is usually only when your application is reinstalled
- or installed for the first time on a device.</p>
- </li>
-</ul>
-
-<p>Every in-app billing request generates a synchronous response. The response is a {@link
-android.os.Bundle} and can include one or more of the following keys:</p>
-
-<ul>
- <li><code>RESPONSE_CODE</code>
- <p>This key provides status information and error information about a request.</p>
- </li>
- <li><code>PURCHASE_INTENT</code>
- <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
- activity.</p>
- </li>
- <li><code>REQUEST_ID</code>
- <p>This key provides you with a request identifier, which you can use to match asynchronous
- responses with requests.</p>
- </li>
-</ul>
-
-<p>Some of these keys are not relevant to certain types of requests. Table 3 shows which keys are
-returned for each request type.</p>
-
-<p class="table-caption"><strong>Table 3.</strong> Description of Bundle keys that are returned with
-each in-app billing request type.</p>
-
-<table>
-
-<tr>
-<th>Request Type</th>
-<th>Keys Returned</th>
-<th>Possible Response Codes</th>
-</tr>
-<tr>
- <td><code>CHECK_BILLING_SUPPORTED</code></td>
- <td><code>RESPONSE_CODE</code></td>
- <td><code>RESULT_OK</code>, <code>RESULT_BILLING_UNAVAILABLE</code>, <code>RESULT_ERROR</code>,
- <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
- <td><code>REQUEST_PURCHASE</code></td>
- <td><code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, <code>REQUEST_ID</code></td>
- <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
- <td><code>GET_PURCHASE_INFORMATION</code></td>
- <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
- <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
- <td><code>CONFIRM_NOTIFICATIONS</code></td>
- <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
- <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
- <td><code>RESTORE_TRANSACTIONS</code></td>
- <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
- <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-</table>
-
-<h2 id="billing-intents">In-app Billing Broadcast Intents</h2>
-
-<p>The following section describes the in-app billing broadcast intents that are sent by the Google
-Play application. These broadcast intents inform your application about in-app billing actions
-that have occurred. Your application must implement a {@link android.content.BroadcastReceiver} to
-receive these broadcast intents, such as the <code>BillingReceiver</code> that's shown in the in-app
-billing <a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
-application</a>.</p>
-
-<h4>com.android.vending.billing.RESPONSE_CODE</h4>
-
-<p>This broadcast intent contains a Google Play response code, and is sent after you make an
-in-app billing request. A server response code can indicate that a billing request was successfully
-sent to Google Play or it can indicate that some error occurred during a billing request. This
-intent is not used to report any purchase state changes (such as refund or purchase information).
-For more information about the response codes that are sent with this response, see <a
-href="#billing-codes">Google Play Response Codes for In-app Billing</a>. The sample application
-assigns this broadcast intent to a constant named <code>ACTION_RESPONSE_CODE</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
- <li><code>request_id</code>&mdash;a <code>long</code> representing a request ID. A request ID
- identifies a specific billing request and is returned by Google Play at the time a request is
- made.</li>
- <li><code>response_code</code>&mdash;an <code>int</code> representing the Google Play server
- response code.</li>
-</ul>
-
-<h4>com.android.vending.billing.IN_APP_NOTIFY</h4>
-
-<p>This response indicates that a purchase has changed state, which means a purchase succeeded, was
-canceled, or was refunded. This response contains one or more notification IDs. Each notification ID
-corresponds to a specific server-side message, and each messages contains information about one or
-more transactions. After your application receives an <code>IN_APP_NOTIFY</code> broadcast intent,
-you send a <code>GET_PURCHASE_INFORMATION</code> request with the notification IDs to retrieve the
-message details. The sample application assigns this broadcast intent to a constant named
-<code>ACTION_NOTIFY</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
- <li><code>notification_id</code>&mdash;a <code>String</code> representing the notification ID for
- a given purchase state change. Google Play notifies you when there is a purchase state change
- and the notification includes a unique notification ID. To get the details of the purchase state
- change, you send the notification ID with the <code>GET_PURCHASE_INFORMATION</code> request.</li>
-</ul>
-
-<h4>com.android.vending.billing.PURCHASE_STATE_CHANGED</h4>
-
-<p>This broadcast intent contains detailed information about one or more transactions. The
-transaction information is contained in a JSON string. The JSON string is signed and the signature
-is sent to your application along with the JSON string (unencrypted). To help ensure the security of
-your in-app billing messages, your application can verify the signature of this JSON string. The
-sample application assigns this broadcast intent to a constant named
-<code>ACTION_PURCHASE_STATE_CHANGED</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
- <li><code>inapp_signed_data</code>&mdash;a <code>String</code> representing the signed JSON
- string.</li>
- <li><code>inapp_signature</code>&mdash;a <code>String</code> representing the signature.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Your application should map the broadcast intents and extras
-to constants that are unique to your application. See the <code>Consts.java</code> file in the
-sample application to see how this is done.</p>
-
-<p>The fields in the JSON string are described in the following table (see table 4):</p>
-
-<p class="table-caption"><strong>Table 4.</strong> Description of JSON fields that are returned with
-a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
-
-<table>
-
-<tr>
-<th>Field</th>
-<th>Description</th>
-</tr>
-<tr>
- <td>nonce</td>
- <td>A number used once. Your application generates the nonce and sends it with the
- <code>GET_PURCHASE_INFORMATION</code> request. Google Play sends the nonce back as part of the
- JSON string so you can verify the integrity of the message.</td>
-</tr>
-<tr>
- <td>notificationId</td>
- <td>A unique identifier that is sent with an <code>IN_APP_NOTIFY</code> broadcast intent. Each
- <code>notificationId</code> corresponds to a specify message that is waiting to be retrieved on
- the Google Play server. Your application sends back the <code>notificationId</code> with the
- <code>GET_PURCHASE_INFORMATION</code> message so Google Play can determine which messages you
- are retrieving.</td>
-</tr>
-<tr>
- <td>orderId</td>
- <td>A unique order identifier for the transaction. This corresponds to the Google Wallet Order
- ID.</td>
-</tr>
-<tr>
- <td>packageName</td>
- <td>The application package from which the purchase originated.</td>
-</tr>
-<tr>
- <td>productId</td>
- <td>The item's product identifier. Every item has a product ID, which you must specify in the
- application's product list on the Google Play publisher site.</td>
-</tr>
-<tr>
- <td>purchaseTime</td>
- <td>The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).</td>
-</tr>
-
-<tr>
- <td>purchaseState</td>
- <td>The purchase state of the order. Possible values are 0 (purchased), 1 (canceled), 2
- (refunded), or 3 (expired, for subscription purchases only).</td>
-</tr>
-<tr>
- <td>purchaseToken</td>
- <td>A token that uniquely identifies a subscription purchase for a given item and user pair.
- You can use the token to specify the subscription when querying for subscription validity.
-
- <p><br><em>Supported only in In-app Billing API version 2 and higher.</em></p></td>
-</tr>
-<tr>
- <td>developerPayload</td>
- <td>A developer-specified string that contains supplemental information about an order. You can
- specify a value for this field when you make a <code>REQUEST_PURCHASE</code> request.</td>
-</tr>
-</table>
-
-<!--<h2 id="other-intents">Other Intents</h2>
-
-<p>The following Intents related to In-app Billing may be useful in your
-implemention. </p> -->
-
-<h2 id="http-api">HTTP API for verification and cancelation</h2>
-
-<p>Google Play offers an HTTP-based API that you can use to remotely query the
-validity of a specific subscription at any time or cancel a subscription. The
-API is designed to be used from your backend servers as a way of securely
-managing subscriptions, as well as extending and integrating subscriptions with
-other services. See <a
-href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#play-dev-api">
-Google Play Android Developer API</a> for more information.</p>
-
-<h2 id="billing-versions">In-app Billing API Versions</h2>
-
-<p>The In-app Billing API is versioned, with each version offering
-additional features to your app. At run time, your app can query the Google Play app to determine
-what version of the API it supports and what features are available. Typically, the Google Play app
-will be updated and will support the latest version of the API.
-
-<p>The sections below list the supported versions of the In-app Billing API.
-Versions are specified in the <code>API_VERSION</code> key of the Bundle object
-passed in the <code>sendBillingRequest()</code>, which is defined in the defined
-in the <code>IMarketBillingService.aidl</code> file, which is included with the
-in-app billing <a
-href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
-sample application</a>. For more information, see <a
-href="#billing-interface">In-app Billing Service Interface</a>.</p>
-<h3 id="version_2">In-app Billing version 2</h3>
-
-<p><em>May 2012</em></p>
-
-<ul>
-<li>Adds support for subscriptions.
- <ul>
- <li>Adds a new supported string value, "2", for the <code>API_VERSION</code> key
- of the Bundle object passed in the <code>sendBillingRequest()</code>.</li>
- <li>Adds a new JSON field, <code>purchaseToken</code>, to the
- <code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
- intent. </li>
- <li>Adds a new <code>purchaseState</code> value, <code>3</code> (expired), to the
- <code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
- intent. The value indicates that a subscription has expired and is no longer valid.</li>
-<li>Requires Google Play (Play Store) version 3.5 or higher.</li>
-</ul>
-
-<h3 id="version_1">In-app Billing version 1</h3>
-
-<p><em>March 2011</em></p>
-
-<ul>
-<li>Initial release.</li>
-<li>Requires Google Play/Android Market 2.3.4 or higher.</li>
-</ul>
-
diff --git a/docs/html/guide/google/play/billing/billing_subscriptions.jd b/docs/html/guide/google/play/billing/billing_subscriptions.jd
deleted file mode 100755
index 68eda19..0000000
--- a/docs/html/guide/google/play/billing/billing_subscriptions.jd
+++ /dev/null
@@ -1,913 +0,0 @@
-page.title=Subscriptions
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#overview">Overview of Subscriptions</a>
- <!--<ol>
- <li><a href="#publishing">Subscription publishing and unpublishing</a></li>
- <li><a href="#pricing">Subscription pricing</a></li>
- <li><a href="#user-billing">User billing</a></li>
- <li><a href="#trials">Free trial period</a></li>
- <li><a href="#cancellation">Subscription cancellation</a></li>
- <li><a href="#uninstallation">App uninstallation</a></li>
- <li><a href="#refunds">Refunds</a></li>
- <li><a href="#payment">Payment processing and policies</a></li>
- <li><a href="#requirements">System requirements for subscriptions</a></li>
- <li><a href="#compatibility">Compatibility considerations</a></li>
- </ol> -->
- </li>
- <li><a href="#implementing">Implementing Subscriptions</a>
- <!-- <ol>
- <li><a href="#sample">Sample application</a></li>
- <li><a href="#model">Application model</a></li>
- <li><a href="#token">Purchase token</a></li>
- <li><a href="#version">Checking the In-app Billing API version</a></li>
- <li><a href="purchase">Requesting purchase of a subscription</a></li>
- <li><a href="#restore">Restoring transactions</a></li>
- <li><a href="#validity">Checking subscription validity</a></li>
- <li><a href="#viewstatus">Launching your product page to let the user cancel or view status</a></li>
- <li><a href="#purchase-state-changes">Recurring billing and changes in purchase state</a></li>
- <li><a href="modifying">Modifying your app for subscriptions</a></li>
- </ol> -->
- </li>
- <li><a href="#administering">Administering Subscriptions</a></li>
-
- <li><a href="#play-dev-api">Google Play Android Developer API</a>
- <!-- <ol>
- <li><a href="#using">Using the API</a></li>
- <li><a href="#quota">Quota</a></li>
- <li><a href="#auth">Authorization</a></li>
- <li><a href="#practices">Using the API efficiently</a></li>
- </ol> -->
- </li>
-</ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>Subscriptions let you sell content, services, or features in your app with
-automated, recurring billing. Adding support for subscriptions is
-straightforward and you can easily adapt an existing In-app Billing
-implementation to sell subscriptions. </p>
-
-<p>If you have already implemented In-app Billing for one-time purchase
-products, you will find that you can add support for subscriptions with minimal
-impact on your code. If you are new to In-app Billing, you can implement
-subscriptions using the standard communication model, data structures, and user
-interactions as for other in-app products.subscriptions. Because the
-implementation of subscriptions follows the same path as for other in-app
-products, details are provided outside of this document, starting with the <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
-Overview</a>. </p>
-
-<p>This document is focused on highlighting implementation details that are
-specific to subscriptions, along with some strategies for the associated billing
-and business models.</p>
-
-<h2 id="overview">Overview of Subscriptions</h2>
-
-<p>A <em>subscription</em> is a new product type offered in In-app Billing that lets you
-sell content, services, or features to users from inside your app with recurring
-monthly or annual billing. You can sell subscriptions to almost any type of
-digital content, from any type of app or game.</p>
-
-<p>As with other in-app products, you configure and publish subscriptions using
-the Developer Console and then sell them from inside apps installed on an
-Android-powered devices. In the Developer console, you create subscription
-products and add them to a product list, then set a price and optional trial
-period for each, choose a billing interval (monthly or annual), and then publish.</p>
-
-<p>In your apps, it’s
-straightforward to add support for subscription purchases. The implementation
-extends the standard In-app Billing API to support a new product type but uses
-the same communication model, data structures, and user interactions as for
-other in-app products.</p>
-
-<p>When users purchase subscriptions in your apps, Google Play handles all
-checkout details so your apps never have to directly process any financial
-transactions. Google Play processes all payments for subscriptions through
-Google Wallet, just as it does for standard in-app products and app purchases.
-This ensures a consistent and familiar purchase flow for your users.</p>
-
-<img src="{@docRoot}images/billing_subscription_flow.png" style="border:4px solid ddd;">
-
-
-<p>After users have purchase subscriptions, they can view the subscriptions and
-cancel them, if necessary, from the My Apps screen in the Play Store app or
-from the app's product details page in the Play Store app.</p>
-
-<!--<img src="{@docRoot}images/billing_subscription_cancel.png" style="border:4px solid ddd;">-->
-
-<p>Once users have purchased a subscription through In-app Billing, you can
-easily give them extended access to additional content on your web site (or
-other service) through the use of a server-side API provided for In-app Billing.
-The server-side API lets you validate the status of a subscription when users
-sign into your other services. For more information about the API, see <a
-href="#play-dev-api">Google Play Android Developer API</a>, below. </p>
-
-<p>You can also build on your existing external subscriber base from inside your
-Android apps. If you sell subscriptions on a web site, for example, you can add
-your own business logic to your Android app to determine whether the user has
-already purchased a subscription elsewhere, then allow access to your content if
-so or offer a subscription purchase from Google Play if not.</p>
-
-<p>With the flexibility of In-app Billing, you can even implement your own
-solution for sharing subscriptions across as many different apps or products as
-you want. For example, you could sell a subscription that gives a subscriber
-access to an entire collection of apps, games, or other content for a monthly or
-annual fee. To implement this solution, you could add your own business logic to
-your app to determine whether the user has already purchased a given
-subscription and if so, allow access to your content. </p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
- <h2>Subscriptions at a glance</h2>
- <ul>
- <li>Subscriptions let you sell products with automated, recurring billing</li>
- <li>You can set up subscriptions with either monthly or annual billing</li>
- <li>You can sell multiple subscription items in an app with various billing
- intervals or prices, such as for promotions</li>
- <li>You can offer a configurable trial period for any subscription. <span class="new" style="font-size:.78em;">New!</span></li>
- <li>Users purchase your subscriptions from inside your apps, rather than
- directly from Google Play</li>
- <li>Users manage their purchased subscriptions from the My Apps screen in
- the Play Store app</li>
- <li>Google Play uses the original form of payment for recurring billing</li>
- <li>If a user cancels a subscription, Google Play considers the subscription valid
- until the end of the current billing cycle. The user continues to enjoy the content
- for the rest of the cycle and is not granted a refund.</li>
- </ul>
-</div>
-</div>
-
-<p>In general the same basic policies and terms apply to subscriptions as to
-standard in-app products, however there are some differences. For complete
-information about the current policies and terms, please read the <a
-href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en
-&answer=140504">policies document</a>.</p>
-
-
-<h3 id="publishing">Subscription publishing and unpublishing</h3>
-
-<p>To sell a subscription in an app, you use the tools in the Developer Console
-to set up a product list for the app and then create and configure a new
-subscription. In the subscription, you set the price and billing interval and
-define a subscription ID, title, and description. When you are ready, you can
-then publish the subscription in the app product list.</p>
-
-<p>In the product list, you can add subscriptions, in-app products, or both. You
-can add multiple subscriptions that give access to different content or
-services, or you can add multiple subscriptions that give access to the same
-content but for different intervals or different prices, such as for a
-promotion. For example, a news outlet might decide to offer both monthly and
-annual subscriptions to the same content, with annual having a discount. You can
-also offer in-app purchase equivalents for subscription products, to ensure that
-your content is available to users of older devices that do not support
-subscriptions.</p>
-
-<p>After you add a subscription or in-app product to the product list, you must
-publish the product before Google Play can make it available for purchase. Note
-that you must also publish the app itself before Google Play will make the
-products available for purchase inside the app. </p>
-
-<p class="caution"><strong>Important:</strong> At this time, the capability to
-unpublish a subscription is not available. Support for unpublishing a
-subscription is coming to the Developer Console in the weeks ahead, so this is a
-temporary limitation. In the short term, instead of unpublishing,
-you can remove the subscription product from the product list offered in your
-app to prevent users from seeing or purchasing it.</p>
-
-<h3 id="pricing">Subscription pricing</h3>
-
-<p>When you create a subscription in the Developer Console, you can set a price
-for it in any available currencies. Each subscription must have a non-zero
-price. You can price multiple subscriptions for the same content differently
-&mdash; for example you could offer a discount on an annual subscription
-relative to the monthly equivalent. </p>
-
-<p class="caution"><strong>Important:</strong> At this time, once you publish a
-subscription product, you cannot change its price in any currency. Support for
-changing the price of published subscriptions is coming to the Developer Console
-in the weeks ahead. In the short term, you can work around this limitation by
-publishing a new subscription product ID at a new price, then offer it in your
-app instead of the original product. Users who have already purchased will
-continue to be charged at the original price, but new users will be charged at
-the new price.</p>
-
-<h3 id="user-billing">User billing</h3>
-
-<p>You can sell subscription products with automated recurring billing at
-either of two intervals:</p>
-
-<ul>
- <li>Monthly &mdash; Google Play bills the customer’s Google Wallet account at
- the time of purchase and monthly subsequent to the purchase date (exact billing
- intervals can vary slightly over time)</li>
- <li>Annually &mdash; Google Play bills the customer's Google Wallet account at
- the time of purchase and again on the same date in subsequent years.</li>
-</ul>
-
-<p>Billing continues indefinitely at the interval and price specified for the
-subscription. At each subscription renewal, Google Play charges the user account
-automatically, then notifies the user of the charges afterward by email. Billing
-cycles will always match subscription cycles, based on the purchase date.</p>
-
-<p>Over the life of a subscription, the form of payment billed remains the same
-&mdash; Google Play always bills the same form of payment (such as credit card,
-Direct Carrier Billing) that was originally used to purchase the
-subscription.</p>
-
-<p>When the subscription payment is approved by Google Wallet, Google Play
-provides a purchase token back to the purchasing app through the In-app Billing
-API. For details, see <a href="#token">Purchase token</a>, below. Your apps can
-store the token locally or pass it to your backend servers, which can then use
-it to validate or cancel the subscription remotely using the <a
-href="#play-dev-api">Google Play Android Developer API</a>.</p>
-
-<p>If a recurring payment fails, such as could happen if the customer’s credit
-card has become invalid, the subscription does not renew. Google Play notifies your
-app at the end of the active cycle that the purchase state of the subscription is now "Expired".
-Your app does not need to grant the user further access to the subscription content.</p>
-
-<p>As a best practice, we recommend that your app includes business logic to
-notify your backend servers of subscription purchases, tokens, and any billing
-errors that may occur. Your backend servers can use the server-side API to query
-and update your records and follow up with customers directly, if needed.</p>
-
-<h3 id="trials">Free Trial Period</h3>
-
-<p>For any subscription, you can set up a free trial period that lets users
-try your subscription content before buying it. The trial period
-runs for the period of time that you set and then automatically converts to a full subscription
-managed according to the subscription's billing interval and price.</p>
-
-<p>To take advantage of a free trial, a user must "purchase" the full
-subscription through the standard In-app Billing flow, providing a valid form of
-payment to use for billing and completing the normal purchase transaction.
-However, the user is not charged any money, since the initial period corresponds
-to the free trial. Instead, Google Play records a transaction of $0.00 and the
-subscription is marked as purchased for the duration of the trial period or
-until cancellation. When the transaction is complete, Google Play notifies users
-by email that they have purchased a subscription that includes a free trial
-period and that the initial charge was $0.00. </p>
-
-<p>When the trial period ends, Google Play automatically initiates billing
-against the credit card that the user provided during the initial purchase, at the amount set
-for the full subscription, and continuing at the subscription interval. If
-necessary, the user can cancel the subscription at any time during the trial
-period. In this case, Google Play <em>marks the subscription as expired immediately</em>,
-rather than waiting until the end of the trial period. The user has not
-paid for the trial period and so is not entitled to continued access after
-cancellation.</p>
-
-<p>You can set up a trial period for a subscription in the Developer Console,
-without needing to modify or update your APK. Just locate and edit the
-subscription in your product list, set a valid number of days for the trial
-(must be 7 days or longer), and publish. You can change the period any time,
-although note that Google Play does not apply the change to users who have
-already "purchased" a trial period for the subscription. Only new subscription
-purchases will use the updated trial period. You can create one free trial
-period per subscription product.</p>
-
-<h3 id="cancellation">Subscription cancellation</h3>
-
-<p>Users can view the status of all of their subscriptions and cancel them if
-necessary from the My Apps screen in the Play Store app. Currently, the In-app
-Billing API does not provide support for canceling subscriptions direct from
-inside the purchasing app, although your app can broadcast an Intent to launch
-the Play Store app directly to the My Apps screen.</p>
-
-<p>When the user cancels a subscription, Google Play does not offer a refund for
-the current billing cycle. Instead, it allows the user to have access to the
-cancelled subscription until the end of the current billing cycle, at which time
-it terminates the subscription. For example, if a user purchases a monthly
-subscription and cancels it on the 15th day of the cycle, Google Play will
-consider the subscription valid until the end of the 30th day (or other day,
-depending on the month).</p>
-
-<p>In some cases, the user may contact you directly to request cancellation of a
-subscription. In this and similar cases, you can use the server-side API to
-query and directly cancel the user’s subscription from your servers.
-
-<p class="caution"><strong>Important:</strong> In all cases, you must continue
-to offer the content that your subscribers have purchased through their
-subscriptions, for as long any users are able to access it. That is, you must
-not remove any subscriber’s content while any user still has an active
-subscription to it, even if that subscription will terminate at the end of the
-current billing cycle. Removing content that a subscriber is entitled to access
-will result in penalties. Please see the <a
-href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies document</a> for more information. </p>
-
-<h3 id="uninstall">App uninstallation</h3>
-
-<p>When the user uninstalls an app that includes purchased subscriptions, the Play Store app will notify the user that there are active subscriptions. If the user chooses to continue with the uninstalltion, the app is removed and the subscriptions remain active and recurring billing continues. The user can return to cancel the associated subscriptions at any time in the My Apps screen of the Play Store app. If the user chooses to cancel the uninstallation, the app and subscriptions remain as they were.</p>
-
-<h3 id="refunds">Refunds</h3>
-
-<p>As with other in-app products, Google Play does not provide a refund window
-for subscription purchases. For example, users who purchase an app can ask for a
-refund from Google Play within a 15-minute window. With subscriptions, Google
-Play does not provide a refund window, so users will need to contact you
-directly to request a refund.
-
-<p>If you receive requests for refunds, you can use the server-side API to
-cancel the subscription or verify that it is already cancelled. However, keep in
-mind that Google Play considers cancelled subscriptions valid until the end of
-their current billing cycles, so even if you grant a refund and cancel the
-subscription, the user will still have access to the content.
-
-<p class="note"><strong>Note:</strong> Partial refunds for canceled
-subscriptions are not available at this time.</p>
-
-<h3 id="payment">Payment processing and policies</h3>
-
-<p>In general, the terms of Google Play allow you to sell in-app subscriptions
-only through the standard payment processor, Google Wallet. For purchases of any
-subscription products, just as for other in-app products and apps, the
-transaction fee for subscriptions, just as for other in-app purchases, is the
-same as the transaction fee for application purchases (30%).</p>
-
-<p>Apps published on Google Play that are selling subscriptions must use In-app
-Billing to handle the transaction and may not provide links to a purchase flow
-outside of the app and Google Play (such as to a web site).</p>
-
-<p>For complete details about terms and policies, see the <a
-href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies
-document</a>.</p>
-
-<h3 id="requirements">System requirements for subscriptions</h3>
-
-<p>In-app purchases of subscriptions are supported only on devices that meet
-these minimum requirements:</p>
-
-<ul>
- <li>Must run Android 2.2 or higher</li>
- <li>Google Play Store app, version 3.5 or higher, must be installed</li>
-</ul>
-
-<p>Google Play 3.5 and later versions include support for the In-app Billing
-v2 API or higher, which is needed to support handling of subscription
-products.</p>
-
-<h3 id="compatibility">Compatibility considerations</h3>
-
-<p>As noted in the previous section, support for subscriptions is available only
-on devices that meet the system requirements. Not all devices will receive or
-install Google Play 3.5, so not all users who install your apps will have access
-to the In-app Billing API and subscriptions.</p>
-
-<p>If you are targeting older devices that run Android 2.1 or earlier, we
-recommend that you offer those users an alternative way buy the content that is
-available through subscriptions. For example, you could create standard in-app
-products (one-time purchases) that give access to similar content as your
-subscriptions, possibly for a longer interval such as a year. </p>
-
-
-<h2 id="implementing">Implementing Subscriptions</h2>
-
-<p>Subscriptions are a standard In-app Billing product type. If you have already
-implemented In-app Billing for one-time purchase products, you will find that
-adding support for subscriptions is straightforward, with minimal impact on your
-code. If you are new to In-app Billing, you can implement subscriptions using
-the standard communication model, data structures, and user interactions as for
-other in-app products.subscriptions. </p>
-
-<p>The full implementation details for In-app Billing are provided outside of
-this document, starting with the <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
-Overview</a>. This document is focused on highlighting implementation details
-that are specific to subscriptions, along with some strategies for the
-associated billing and business models.</p>
-
-
-<h3 id="sample">Sample application</h3>
-
-<p>To help you get started with your In-app Billing implementation and
-subscriptions, an updated version of the In-app Billing sample app is available.
-You can download the sample app from the Android SDK repository using the
-Android SDK Manager. For details, see <a
-href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
-Downloading the Sample Application</a>.</p>
-
-<h3 id="model">Application model</h3>
-
-<p>With subscriptions, your app uses the standard In-app Billing application
-model, sending billing requests to the Play Store application over interprocess
-communication (IPC) and receiving purchase responses from the Play Store app in
-the form of asynchronous broadcast intents. Your application does not manage any
-network connections between itself and the Google Play server or use any special
-APIs from the Android platform.</p>
-
-<p>Your app also uses the standard In-app Billing components &mdash; a billing
-Service for sending requests, a BroadcastReceiver for receiving the responses,
-and a security component for verifying that the response was sent by Google
-Play. Also recommended are a response Handler for processing notifications,
-errors, and status messages, and an observer for sending callbacks to your
-application as needed. All of these components and their interactions are
-described in full in the <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
-Overview</a> and related documents.</p>
-
-<p>To initiate different types of billing communication with Google Play, your
-app will use the standard set of in-app billing requests and receive the same
-responses. Inside the requests and responses are two new fields described below.
-</p>
-
-<h3 id="token">Purchase token</h3>
-
-<p>Central to the end-to-end architecture for subscriptions is the purchase
-token, a string value that uniquely identifies (and associates) a user ID and a
-subscription ID. Google Play generates the purchase token when the user
-completes the purchase of a subscription product (and payment is approved by
-Google Wallet) and then sends it to the purchasing app on the device through the
-In-app Billing API. </p>
-
-<p>At the conclusion of a <code>PURCHASE_REQUEST</code> message flow, your app
-can retrieve the purchase token and other transaction details by initiating a
-<code>GET_PURCHASE_INFORMATION</code> request. The Bundle returned by the call
-contains an JSON array of order objects. In the order corresponding to the
-subscription purchase, the token is available in the <code>purchaseToken</code>
-field. </p>
-
-<p>An example of a JSON order object that includes a subscription purchase token
-is shown below. </p>
-
-<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
- "orders" :
- [{ "notificationId" : "android.test.purchased",
- "orderId" : "transactionId.android.test.purchased",
- "packageName" : "com.example.dungeons",
- "productId" : "android.test.purchased",
- "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
- "purchaseTime" : 1290114783411,
- "purchaseState" : 0,
- "purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
-}
-</pre>
-
-<p>After receiving a purchase token, your apps can store the token locally or
-pass it to your backend servers, which can then use it to query the billing
-status or cancel the subscription remotely. If your app will store the token
-locally, please read the <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
-Design</a> document for best practices for maintaining the security of your
-data.</p>
-
-<h3 id="version">Checking the In-app Billing API version</h3>
-
-<p>Subscriptions support is available only in versions of Google Play that
-support the In-app Billing v2 API (Google Play 3.5 and higher). For your app,
-an essential first step at launch is to check whether the version of Google Play
-installed on the device supports the In-app Billing v2 API and
-subscriptions.</p>
-
-<p>To do this, create a CHECK_BILLING_SUPPORTED request Bundle that includes the
-required key-value pairs, together with</p>
-
-<ul>
- <li>The <code>API_VERSION</code> key, assigning a value of 2.</li>
- <li>The <code>BILLING_REQUEST_ITEM_TYPE</code> key, assigning a value of “subs”</li>
-</ul>
-
-<p>Send the request using <code>sendBillingRequest(Bundle)</code> and receive
-the response Bundle. You can extract the response from the
-<code>BILLING_RESPONSE_RESPONSE_CODE</code> key of the response. RESULT_OK
-indicates that subscriptions are supported.</p>
-
-<p>The sample app declares constants for the accepted
-<code>BILLING_REQUEST_ITEM_TYPE</code> values (from Consts.java):</p>
-
-<pre class="pretty-print"> // These are the types supported in the IAB v2
- public static final String ITEM_TYPE_INAPP = "inapp";
- public static final String ITEM_TYPE_SUBSCRIPTION = "subs";
-</pre>
-
-<p>It sets up a convenience method for building the request bundle (from BillingService.java):</p>
-
-<pre class="pretty-print"> protected Bundle makeRequestBundle(String method) {
- Bundle request = new Bundle();
- request.putString(Consts.BILLING_REQUEST_METHOD, method);
- request.putInt(Consts.BILLING_REQUEST_<code>API_VERSION</code>, 2);
- request.putString(Consts.BILLING_REQUEST_PACKAGE_NAME, getPackageName());
- return request;
- }
-</pre>
-
-<p>Here’s an example of how to test support for In-App Billing v2 and subscriptions
-(from BillingService.java):</p>
-
-<pre class="pretty-print"> /**
- * Wrapper class that checks if in-app billing is supported.
- */
- class CheckBillingSupported extends BillingRequest {
- public String mProductType = null;
- public CheckBillingSupported() {
- // This object is never created as a side effect of starting this
- // service so we pass -1 as the startId to indicate that we should
- // not stop this service after executing this request.
- super(-1);
- }
-
- public CheckBillingSupported(String type) {
- super(-1);
- mProductType = type;
- }
-
- &#64;Override
- protected long run() throws RemoteException {
- Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
- if (mProductType != null) {
- request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
- }
- Bundle response = mService.sendBillingRequest(request);
- int responseCode = response.getInt(Consts.<code>BILLING_RESPONSE_RESPONSE_CODE</code>);
- if (Consts.DEBUG) {
- Log.i(TAG, "CheckBillingSupported response code: " +
- ResponseCode.valueOf(responseCode));
- }
- boolean billingSupported = (responseCode == ResponseCode.RESULT_OK.ordinal());
- ResponseHandler.checkBillingSupportedResponse(billingSupported, mProductType);
- return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
- }
- }
-</pre>
-
-<h3 id="purchase">Requesting a subscription purchase</h3>
-
-<p>Once you’ve checked the API version as described above and determined that
-subscriptions are supported, you can present subscription products to the user
-for purchase. When the user has selected a subscription product and initiated a
-purchase, your app handles the purchase just as it would for other in-app
-products &mdash; by sending a REQUEST_PURCHASE request. You can then launch
-Google Play to display the checkout user interface and handle the financial
-transaction..
-
-<p>The REQUEST_PURCHASE includes a Bundle containing the item details, as
-described in the <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
-Overview</a>. For a subscription, the Bundle must also specify:</p>
-
-<ul>
- <li>The <code>ITEM_ID</code> key, with a value that specifies a valid, published
- subscription product.</li>
- <li>The <code>ITEM_TYPE</code> key, with a value of “subs”
- (<code>ITEM_TYPE_SUBSCRIPTION</code> in the sample app). If the request does not
- specify the subscription's <code>ITEM_TYPE</code>, Google Play attempts to
- handle the request as a standard in-app purchase (one-time purchase).</li>
-</ul>
-
-<p>Google Play synchronously returns a response bundle that includes
-<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and
-<code>REQUEST_ID</code>. Your app uses the <code>PURCHASE_INTENT</code> to
-launch the checkout UI and the message flow proceeds exactly as described in <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
-sequence">Messaging sequence</a>.</p>
-
-<p>Here’s how the sample app initiates a purchase for a subscription, where
-<code>mProductType</code> is <code>ITEM_TYPE_SUBSCRIPTION</code> (from
-BillingService.java).</p>
-
-<pre class="pretty-print"> /**
- * Wrapper class that requests a purchase.
- */
- class RequestPurchase extends BillingRequest {
- public final String mProductId;
- public final String mDeveloperPayload;
- public final String mProductType;
-
-. . .
-
- &#64;Override
- protected long run() throws RemoteException {
- Bundle request = makeRequestBundle("REQUEST_PURCHASE");
- request.putString(Consts.BILLING_REQUEST_ITEM_ID, mProductId);
- request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
- // Note that the developer payload is optional.
- if (mDeveloperPayload != null) {
- request.putString(Consts.BILLING_REQUEST_DEVELOPER_PAYLOAD, mDeveloperPayload);
- }
- Bundle response = mService.sendBillingRequest(request);
- PendingIntent pendingIntent
- = response.getParcelable(Consts.BILLING_RESPONSE_PURCHASE_INTENT);
- if (pendingIntent == null) {
- Log.e(TAG, "Error with requestPurchase");
- return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
- }
-
- Intent intent = new Intent();
- ResponseHandler.buyPageIntentResponse(pendingIntent, intent);
- return response.getLong(Consts.BILLING_RESPONSE_REQUEST_ID,
- Consts.BILLING_RESPONSE_INVALID_REQUEST_ID);
- }
-
- &#64;Override
- protected void responseCodeReceived(ResponseCode responseCode) {
- ResponseHandler.responseCodeReceived(BillingService.this, this, responseCode);
- }
- }
-</pre>
-
-<h3 id="restoring">Restoring transactions</h3>
-
-<p>Subscriptions always use the <em>managed by user account</em> purchase type,
-so that you can restore a record of subscription transactions on the device when
-needed. When a user installs your app onto a new device, or when the user
-uninstalls/reinstalls the app on the original device, your app should restore
-the subscriptions that the user has purchased.</p>
-
-<p>The process for restoring subscriptions transactions is the same as described
-in <a
-href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
-sequence">Messaging sequence</a>. Your app sends a
-<code>RESTORE_TRANSACTIONS</code> request to Google Play. Google Play sends two
-broadcast intents as asynchronous responses &mdash; a <code>RESPONSE_CODE</code>
-intent and a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
-
-<p>The <code>PURCHASE_STATE_CHANGED</code> intent contains a notification ID
-that your app can use to retrieve the purchase details, including the purchase
-token, by sending a standard <code>GET_PURCHASE_INFORMATION</code> request. The
-<code>Bundle</code> returned in the call includes an JSON array of order objects
-corresponding to subscription (and in-app product) purchases that you can
-restore locally.</p>
-
-<p>Your app can store the restored purchase state and other transaction details
-in the way that best meets your needs. Your app can use it later to check the
-subscription validity, although please read the <a
-href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
-Design</a> document for best practices for maintaining the security of your
-data.</p>
-
-<h3 id="validity">Checking subscription validity</h3>
-
-<p>Subscriptions are time-bound purchases that require successful billing
-recurrences over time to remain valid. Your app should check the validity of
-purchased subscriptions at launch or prior to granting access to subscriber
-content.</p>
-
-<p>With In-app Billing, you validate a subscription by keeping track of its
-purchase state and then checking the state whenever needed. Google Play
-provides two ways to let you know when the purchase
-state of a subscription changes:</p>
-
-<ul>
- <li><em>In-app Billing Notifications</em>. Google Play pushes a notification
- to your app to indicate a change in the purchase state of a subscription. Your app can
- store the most recent purchase state for a given purchase token and then check
- that state at run time, as needed.</li>
- <li><em>Google Play Android Developer API</em>. You can use this HTTP-based
- API to poll Google Play for the current purchase state of a subscription. You
- can store the purchased state for each <code>purchaseToken</code> on your
- backend servers. For more information, see <a href="#play-dev-api">Google Play
- Android Developer API</a>, below.</li>
-</ul>
-
-<p>For most use-cases, especially those where backend servers are already keeping
-track of subscribed users, implementing a combination of both methods is the
-recommended approach. A typical implementation might work like this:</p>
-
-<ul>
- <li>When the user successfully purchases a new subscription, your app notifies a
- backend server, which stores the purchase token, user name, and other
- information in a secure location.</li>
- <li>Since your app cannot know the expiration date, your server can poll Google
- Play to get the expiration and store it with the purchase token and other
- data.</li>
- <li>Because your server now knows the expiration date, it does not need to poll
- Google Play again until after the expiration date, at which time it can confirm
- that the subscription was not cancelled.</li>
- <li>On the client side, your app can continue to update the server whenever the
- purchase state changes, storing the state locally.</li>
-</ul>
-
-<p>If you are using both notifications and the Google Play Android Developer API to validate subscriptions, we recommend the following:</p>
-
-<ul>
- <li>If your app wants to check validity but you can’t reach your server (or
-you don’t have a server), use the latest purchase state received by
-notification.</li>
- <li>If you have a server and it’s reachable, always give preference to the
-purchase state obtained from your server over the state received in
-notifications.</li>
-</ul>
-
-<p>If necessary, you can also use a <code>RESTORE_TRANSACTIONS</code> request to retrieve a record of all managed and in-app products purchased by the user, which you can then store locally. However, using <code>RESTORE_TRANSACTIONS</code> on a regular basis is not recommended because of performance impacts.</p>
-
-<p>Regardless of the approach you choose, your app should check subscriptions
-and validity at launch, such as prior to accessing subscriber content, game
-levels, and so on.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Summary of purchaseState
-values for subscription purchases, as received with a
-<code>PURCHASE_STATE_CHANGED</code> intent.</p>
-
-<table>
-<tr>
-<th>State</th><th>purchaseState Value</th><th>Comments</th>
-</tr>
-<tr>
-<td>Purchased successfully</td><td><code>0</code></td><td>Sent at original purchase only (not at recurring billing cycles).</td></tr>
-<td>Cancelled</td><td><code>1</code></td><td>Sent at original purchase only if the purchase has failed for some reason. </td></tr>
-<td>Refunded</td><td><code>2</code></td><td>The purchase was refunded.</code></td></tr>
-<td>Subscription expired</td><td><code>3</code></td><td>Sent at the end of a billing cycle to indicate that the subscription expired without renewal because of non-payment or user-cancellation. Your app does not need to grant continued access to the subscription content.
-</td></tr>
-</table>
-
-
-<h3 id="viewstatus">Launching your product page to let the user cancel or view subscriptions</h3>
-
-<p>In-app Billing does not currently provide an API to let users directly view or cancel
-subscriptions from within the purchasing app. Instead, users can launch the Play
-Store app on their devices and go to the My Apps screen to manage subscriptions. In My Apps,
-users can see a list of their subscriptions organized by application. Tapping one of the
-subscriptions loads the app's product page, from which users can see active subscriptions
-and billing status and cancel subscriptions as needed.</p>
-
-<p>To make it easier for users to find and manage their subscriptions from inside your app,
-we recommend that you offer a "View My Subscriptions" or "Manage Subscriptions" option in
-your UI that directly loads your app's product page in the Play Store app.</p>
-
-<p>To do this, create an intent with the <a
-href="{@docRoot}reference/android/content/Intent.html#ACTION_VIEW">ACTION_VIEW</a>
-action and include the <code>market://</code> URI (rather than the <code>http://</code>
-URI) of your app's details page. Here’s an example:</p>
-
-<pre style="pretty-print">Intent intent = new Intent(Intent.ACTION_VIEW);
-intent.setData(Uri.parse("market://details?id=com.example.app"));
-startActivity(intent);</pre>
-
-<p>For more information, see
- <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>.</p>
-
-<h3 id="purchase-state-changes">Recurring billing, cancellation, and changes in purchase state</h3>
-
-<p>Google Play notifies your app when the user completes the purchase of a
-subscription, but the purchase state does not change over time, provided that
-recurring billing takes place successfully. Google Play does not notify your app
-of a purchase state change <em>until the subscription expires because of
-non-payment or user cancellation</em>. </p>
-
-<p>Over the life of a subscription, your app does not need to initiate any
-recurring billing events &mdash; those are all handled by Google Play and they
-are transparent to your application if billing is successful.</p>
-
-<p>When the user cancels a subscription during an active billing cycle, Google
-Play <em>does not</em> notify your app immediately of the change in purchase
-state. Instead, it waits until the end of the active billing cycle and then
-notifies your app that the purchase state has changed to "Expired". </p>
-
-<p>Similarly, if payment for the next billing cycle fails, Google Play waits
-until the end of the active billing cycle and then notifies your app at that time that the
-purchase state has changed to "Expired".</p>
-
-<p>Your app can handle user cancellation and non-payment in the same way, since both cause
-a change to the same "Expired" purchase state. Once the purchase state has become "Expired",
-your app does not need to grant further access to the subscription content.</p>
-
-<h3 id="modifying">Modifying your app for subscriptions</h3>
-
-<p>For subscriptions, you make the same types of modifications to your app as
-are described in <a
-href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-implement">
-Modifying your Application Code</a>.</p>
-
-<p>Note that, in your UI that lets users view and select subscriptions for
-purchase, you should add logic to check for purchased subscriptions and validate
-them. Your UI should not present subscriptions if the user has already purchased
-them.</p>
-
-<h2 id="administering">Administering Subscriptions</h2>
-
-<p>To create and manage subscriptions, you use the tools in the Developer
-Console, just as for other in-app products.</p>
-
-<p>At the Developer Console, you can configure these attributes for each
-subscription product:</p>
-
-<ul>
-<li>Purchase Type: always set to “subscription”</li>
-<li>Subscription ID: An identifier for the subscription</li>
-<li>Publishing State: Unpublished/Published</li>
-<li>Language: The default language for displaying the subscription</li>
-<li>Title: The title of the subscription product</li>
-<li>Description: Details that tell the user about the subscription</li>
-<li>Price: USD price of subscription per recurrence</li>
-<li>Recurrence: monthly or yearly</li>
-<li>Additional currency pricing (can be auto-filled)</li>
-</ul>
-
-<p>For details, please see <a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
-In-app Billing</a>.</p>
-
-
-<h2 id="play-dev-api">Google Play Android Developer API</h2>
-
-<p>Google Play offers an HTTP-based API that you can use to remotely query the
-validity of a specific subscription at any time or cancel a subscription. The
-API is designed to be used from your backend servers as a way of securely
-managing subscriptions, as well as extending and integrating subscriptions with
-other services.</p>
-
-<h3 id="using">Using the API</h3>
-
-<p>To use the API, you must first register a project at the <a
-href="https://code.google.com/apis/console">Google APIs Console</a> and receive
-a Client ID and shared secret that your app will present when calling the
-Google Play Android Developer API. All calls to the API are authenticated with
-OAuth 2.0.</p>
-
-<p>Once your app is registered, you can access the API directly, using standard
-HTTP methods to retrieve and manipulate resources, or you can use the Google
-APIs Client Libraries, which are extended to support the API.</p>
-
-<p>The Google Play Android Developer API is built on a RESTful design that uses
-HTTP and JSON, so any standard web stack can send requests and parse the
-responses. However, if you don’t want to send HTTP requests and parse responses
-manually, you can access the API using the client libraries, which provide
-better language integration, improved security, and support for making calls
-that require user authorization.</p>
-
-<p>For more information about the API and how to access it through the Google
-APIs Client Libraries, see the documentation at:</p>
-
-<p style="margin-left:1.5em;"><a
-href="https://developers.google.com/android-publisher/v1/">https://developers.
-google.com/android-publisher/v1/</a></p>
-
-<h3 id="quota">Quota</h3>
-
-<p>Applications using the Google Play Android Developer API are limited to an
-initial courtesy usage quota of <strong>15000 requests per day</strong> (per
-application). This should provide enough access for normal
-subscription-validation needs, assuming that you follow the recommendation in
-this section.</p>
-
-<p>If you need to request a higher limit for your application, please use the
-“Request more” link in the <a
-href="https://code.google.com/apis/console/#:quotas">Google APIs Console</a>.
-Also, please read the section below on design best practices for minimizing your
-use of the API.</p>
-
-<h3 id="auth">Authorization</h3>
-
-<p>Calls to the Google Play Android Developer API require authorization. Google
-uses the OAuth 2.0 protocol to allow authorized applications to access user
-data. To learn more, see <a
-href="https://developers.google.com/android-publisher/authorization">Authorization</a>
-in the Google Play Android Developer API documentation.</p>
-
-<h3 id="practices">Using the API efficiently</h3>
-
-<p>Access to the Google Play Android Developer API is regulated to help ensure a
-high-performance environment for all applications that use it. While you can
-request a higher daily quota for your application, we highly recommend that you
-minimize your access using the technique(s) below. </p>
-
-<ul>
- <li><em>Store subscription expiry on your servers</em> &mdash; your servers
- should use the Google Play Android Developer API to query the expiration date
- for new subscription tokens, then store the expiration date locally. This allows
- you to check the status of subscriptions only at or after the expiration (see
- below). </li>
- <li><em>Cache expiration and purchaseState</em> &mdash; If your app contacts
- your backend servers at runtime to verify subscription validity, your server
- should cache the expiration and purchaseState to ensure the fastest possible
- response (and best experience) for the user.</li>
- <li><em>Query for subscription status only at expiration</em> &mdash; Once your
- server has retrieved the expiration date of subscription tokens, it should not
- query the Google Play servers for the subscription status again until the
- subscription is reaching or has passed the expiration date. Typically, your
- servers would run a batch query each day to check the status of
- <em>expiring</em> subscriptions, then update the database. Note that:
- <ul>
- <li>Your servers should not query all subscriptions every day</li>
- <li>Your servers should never query subscription status dynamically, based on
- individual requests from your Android application. </li>
- </ul>
- </li>
-</ul>
-
-<p>By following those general guidelines, your implementation will offer the
-best possible performance for users and minimize use of the Google Play Android
-Developer API.</p>
-
diff --git a/docs/html/guide/google/play/billing/billing_testing.jd b/docs/html/guide/google/play/billing/billing_testing.jd
deleted file mode 100755
index e2d4a01..0000000
--- a/docs/html/guide/google/play/billing/billing_testing.jd
+++ /dev/null
@@ -1,293 +0,0 @@
-page.title=Testing In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#billing-testing-static">Testing in-app purchases with static responses</a></li>
- <li><a href="#billing-testing-real">Testing in-app purchases using your own product IDs</a></li>
-
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
-</div>
-</div>
-
-<p>The Google Play publisher site provides several tools that help you test your in-app billing
-implementation before it is published. You can use these tools to create test accounts and purchase
-special reserved items that send static billing responses to your application.</p>
-
-<p>To test in-app billing in an application you must install the application on an Android-powered
-device. You cannot use the Android emulator to test in-app billing. The device you use for testing
-must run a standard version of the Android 1.6 or later platform (API level 4 or higher), and have
-the most current version of the Google Play application installed. If a device is not running the
-most current Google Play application, your application won't be able to send in-app billing
-requests to Google Play. For general information about how to set up a device for use in
-developing Android applications, see <a href="{@docRoot}tools/device.html">Using Hardware
-Devices</a>.</p>
-
-<p>The following section shows you how to set up and use the in-app billing test tools.</p>
-
-<h2 id="billing-testing-static">Testing in-app purchases with static responses</h2>
-
-<p>We recommend that you first test your in-app billing implementation using static responses from
-Google Play. This enables you to verify that your application is handling the primary Google
-Play responses correctly and that your application is able to verify signatures correctly.</p>
-
-<p>To test your implementation with static responses, you make an in-app billing request using a
-special item that has a reserved product ID. Each reserved product ID returns a specific static
-response from Google Play. No money is transferred when you make in-app billing requests with the
-reserved product IDs. Also, you cannot specify the form of payment when you make a billing request
-with a reserved product ID. Figure 1 shows the checkout flow for the reserved item that has the
-product ID android.test.purchased.</p>
-
-<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Wallet flow for the special reserved item android.test.purchased.
-</p>
-
-<p>You do not need to list the reserved products in your application's product list. Google Play
-already knows about the reserved product IDs. Also, you do not need to upload your application to
-the publisher site to perform static response tests with the reserved product IDs. You can simply
-install your application on a device, log into the device, and make billing requests using the
-reserved product IDs.</p>
-
-<p>There are four reserved product IDs for testing static in-app billing responses:</p>
-
-<ul>
- <li><strong>android.test.purchased</strong>
- <p>When you make an in-app billing request with this product ID, Google Play responds as
- though you successfully purchased an item. The response includes a JSON string, which contains
- fake purchase information (for example, a fake order ID). In some cases, the JSON string is
- signed and the response includes the signature so you can test your signature verification
- implementation using these responses.</p>
- </li>
- <li><strong>android.test.canceled</strong>
- <p>When you make an in-app billing request with this product ID Google Play responds as
- though the purchase was canceled. This can occur when an error is encountered in the order
- process, such as an invalid credit card, or when you cancel a user's order before it is
- charged.</p>
- </li>
- <li><strong>android.test.refunded</strong>
- <p>When you make an in-app billing request with this product ID, Google Play responds as
- though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
- billing service. Refunds must be initiated by you (the merchant). After you process a refund
- request through your Google Wallet account, a refund message is sent to your application by
- Google Play. This occurs only when Google Play gets notification from Google Wallet that
- a refund has been made. For more information about refunds, see <a
- href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
- IN_APP_NOTIFY messages</a> and <a
- href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
- Pricing</a>.</p>
- </li>
- <li><strong>android.test.item_unavailable</strong>
- <p>When you make an in-app billing request with this product ID, Google Play responds as
- though the item being purchased was not listed in your application's product list.</p>
- </li>
-</ul>
-
-<p>In some cases, the reserved items may return signed static responses, which lets you test
-signature verification in your application. To test signature verification with the special reserved
-product IDs, you may need to set up <a
-href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
-upload your application as a unpublished draft application. Table 1 shows you the conditions under
-which static responses are signed.</p>
-
-<p class="table-caption" id="static-responses-table"><strong>Table 1.</strong>
-Conditions under which static responses are signed.</p>
-
-<table>
-<tr>
-<th>Application ever been published?</th>
-<th>Draft application uploaded and unpublished?</th>
-<th>User who is running the application</th>
-<th>Static response signature</th>
-</tr>
-
-<tr>
-<td>No</td>
-<td>No</td>
-<td>Any</td>
-<td>Unsigned</td>
-</tr>
-
-<tr>
-<td>No</td>
-<td>No</td>
-<td>Developer</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Any</td>
-<td>Unsigned</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Developer</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Test account</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>Yes</td>
-<td>Any</td>
-<td>Signed</td>
-</tr>
-
-</table>
-
-<p>To make an in-app billing request with a reserved product ID, you simply construct a normal
-<code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your
-application's product list you use one of the reserved product IDs.</p>
-
-<p>To test your application using the reserved product IDs, follow these steps:</p>
-
-<ol>
- <li><strong>Install your application on an Android-powered device.</strong>
- <p>You cannot use the emulator to test in-app billing; you must install your application on a
- device to test in-app billing.</p>
- <p>To learn how to install an application on a device, see <a
- href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
- device</a>.</p>
- </li>
- <li><strong>Sign in to your device with your developer account.</strong>
- <p>You do not need to use a test account if you are testing only with the reserved product
- IDs.</p>
- </li>
- <li><strong>Verify that your device is running a supported version of the Google Play
- application or the MyApps application.</strong>
- <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
- the MyApps application. If your device is running any other version of Android, in-app billing
- requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
- version of the Google Play application, see <a
- href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
- Play</a>.</p>
- </li>
- <li><strong>Run your application and purchase the reserved product IDs.</strong></li>
-</ol>
-
-<p class="note"><strong>Note</strong>: Making in-app billing requests with the reserved product IDs
-overrides the usual Google Play production system. When you send an in-app billing request for a
-reserved product ID, the quality of service will not be comparable to the production
-environment.</p>
-
-<h2 id="billing-testing-real">Testing In-app Purchases Using Your Own Product IDs</h2>
-
-<p>After you finish your static response testing, and you verify that signature verification is
-working in your application, you can test your in-app billing implementation by making actual in-app
-purchases. Testing real in-app purchases enables you to test the end-to-end in-app billing
-experience, including the actual responses from Google Play and the actual checkout flow that
-users will experience in your application.</p>
-
-<p class="note"><strong>Note</strong>: You do not need to publish your application to do end-to-end
-testing. You only need to upload your application as a draft application to perform end-to-end
-testing.</p>
-
-<p>To test your in-app billing implementation with actual in-app purchases, you will need to
-register at least one test account on the Google Play publisher site. You cannot use your
-developer account to test the complete in-app purchase process because Google Wallet does not let
-you buy items from yourself. If you have not set up test accounts before, see <a
-href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">Setting up test
-accounts</a>.</p>
-
-<p>Also, a test account can purchase an item in your product list only if the item is published. The
-application does not need to be published, but the item does need to be published.</p>
-
-<p>When you use a test account to purchase items, the test account is billed through Google Wallet
-and your Google Wallet Merchant account receives a payout for the purchase. Therefore, you may
-want to refund purchases that are made with test accounts, otherwise the purchases will show up as
-actual payouts to your merchant account.</p>
-
-<p>To test your in-app billing implementation with actual purchases, follow these steps:</p>
-
-<ol>
- <li><strong>Upload your application as a draft application to the publisher site.</strong>
- <p>You do not need to publish your application to perform end-to-end testing with real product
- IDs; you only need to upload your application as a draft application. However, you must sign
- your application with your release key before you upload it as a draft application. Also, the
- version number of the uploaded application must match the version number of the application you
- load to your device for testing. To learn how to upload an application to Google Play, see
- <a href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
- applications</a>.</p>
- </li>
- <li><strong>Add items to the application's product list.</strong>
- <p>Make sure that you publish the items (the application can remain unpublished). See <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-catalog">Creating a product
- list</a> to learn how to do this.</p>
- </li>
- <li><strong>Install your application on an Android-powered device.</strong>
- <p>You cannot use the emulator to test in-app billing; you must install your application on a
- device to test in-app billing.</p>
- <p>To learn how to install an application on a device, see <a
- href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
- device</a>.</p>
- </li>
- <li><strong>Make one of your test accounts the primary account on your device.</strong>
- <p>To perform end-to-end testing of in-app billing, the primary account on your device must be
- one of the <a
- href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
- that you registered on the Google Play site. If the primary account on your device is not a
- test account, you must do a factory reset of the device and then sign in with one of your test
- accounts. To perform a factory reset, do the following:</p>
- <ol>
- <li>Open Settings on your device.</li>
- <li>Touch <strong>Privacy</strong>.</li>
- <li>Touch <strong>Factory data reset</strong>.</li>
- <li>Touch <strong>Reset phone</strong>.</li>
- <li>After the phone resets, be sure to sign in with one of your test accounts during the
- device setup process.</li>
- </ol>
- </li>
- <li><strong>Verify that your device is running a supported version of the Google Play
- application or the MyApps application.</strong>
- <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
- the MyApps application. If your device is running any other version of Android, in-app billing
- requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
- version of the Google Play application, see <a
- href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
- Play</a>.</p>
- </li>
- <li><strong>Make in-app purchases in your application.</strong></li>
-</ol>
-
-<p class="note"><strong>Note:</strong> The only way to change the primary account on a device is to
-do a factory reset, making sure you log on with your primary account first.</p>
-
-<p>When you are finished testing your in-app billing implementation, you are ready to
-publish your application on Google Play. You can follow the normal steps for <a
-href="{@docRoot}tools/publishing/preparing.html">preparing</a>, <a
-href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a
-href="{@docRoot}distribute/googleplay/publish/preparing.html">publishing on Google Play</a>.
-</p>
-
diff --git a/docs/html/guide/google/play/billing/index.jd b/docs/html/guide/google/play/billing/index.jd
deleted file mode 100755
index 134140d..0000000
--- a/docs/html/guide/google/play/billing/index.jd
+++ /dev/null
@@ -1,114 +0,0 @@
-page.title=In-app Billing
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>Topics</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
- Design</a></li> <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></li>
- <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
- Billing</a></li>
- </ol>
- <h2>Reference</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></li>
- </ol>
- <h2>Downloads</h2>
- <ol>
- <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
- Application</a></li>
- </ol>
-</div>
-</div>
-
-<p>In-app Billing is a Google Play service that lets you sell digital content from inside
-your applications. You can use the service to sell a wide range of content, including downloadable
-content such as media files or photos, virtual content such as game levels or potions, premium services
-and features, and more. You can use In-app Billing to sell products as</p>
-
-<ul>
-<li>Standard in-app products (one-time billing), or</li>
-<li>Subscriptions, (recurring, automated billing)</li>
-</ul>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
- <p><strong>Free trials for subscriptions</strong> <span class="new" style="font-size:.78em;">New!</span></p>
- <p>You can now offer users a configurable <a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#trials">free trial period</a> for your in-app subscriptions. You can set up trials with a simple change in the Developer Console&mdash;no change to your app code is needed.
-</div>
-</div>
-
-<p>When you use the in-app billing service to sell an item,
-whether it's an in-app product or a subscription, Google Play
-handles all checkout details so your application never has to directly process
-any financial transactions. Google Play uses the same checkout backend service as
-is used for application purchases, so your users experience a consistent and
-familiar purchase flow (see figure 1). Also, the transaction fee for in-app
-purchases is the same as the transaction fee for application purchases
-(30%).</p>
-
-<p>Any application that you publish through Google Play can implement In-app Billing. No special
-account or registration is required other than an Android Market publisher account and a Google
-Wallet Merchant account. Also, because the service uses no dedicated framework APIs, you can add
-in-app billing to any application that uses a minimum API level of 4 or higher.</p>
-
-<p>To help you integrate in-app billing into your application, the Android SDK
-provides a sample application that demonstrates how to sell standard in-app
-products and subscriptions from inside an app. The sample contains examples of
-billing-related classes you can use to implement in-app billing in your
-application. It also contains examples of the database, user interface, and
-business logic you might use to implement in-app billing.</p>
-
-<p class="caution"><strong>Important</strong>: Although the sample application is a working example
-of how you can implement in-app billing, we <em>strongly recommend</em> that you modify and
-obfuscate the sample code before you use it in a production application. For more information, see
-<a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<img src="{@docRoot}images/billing_checkout_flow.png" height="382" id="figure1" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Applications initiate in-app billing requests through their own UI
- (first screen). Google Play responds to the request by providing the checkout user interface
- (middle screen). When checkout is complete, the application resumes.
-</p>
-
-<p>To learn more about Google Play's in-app billing service and start integrating it into your
-applications, read the following documents:</p>
-
-<dl>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
- Billing</a></strong></dt>
- <dd>Learn how the service works and what a typical in-app billing implementation looks
- like.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing
- In-app Billing</a></strong></dt>
- <dd>Use this step-by-step guide to start incorporating in-app billing into your
- application. The instructions apply to both one-time and subscription purchases.</dd>
-
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></strong></dt>
- <dd>Learn how subscriptions work and how to implement support for them in your app.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security
- and Design</a></strong></dt>
- <dd>Review these best practices to help ensure that your in-app billing implementation is
- secure and well designed.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
- Billing</a></strong></dt>
- <dd>Understand how the in-app billing test tools work and learn how to test your in-app billing
- implementation.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
- In-app Billing</a></strong></dt>
- <dd>Learn how to set up your product list, register test accounts, and handle refunds.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
- Reference</a></strong></dt>
- <dd>Get detailed information about Google Play response codes and the in-app billing
- interface.</dd>
-</dl>
-
diff --git a/docs/html/guide/google/play/expansion-files.jd b/docs/html/guide/google/play/expansion-files.jd
deleted file mode 100644
index 9cd1bb1..0000000
--- a/docs/html/guide/google/play/expansion-files.jd
+++ /dev/null
@@ -1,1271 +0,0 @@
-page.title=APK Expansion Files
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
- <li>Recommended for most apps that exceed the 50MB APK limit</li>
- <li>You can provide up to 4GB of additional data for each APK</li>
- <li>Google Play hosts and serves the expansion files at no charge</li>
- <li>The files can be any file type you want and are saved to the device's shared storage</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
- <li><a href="#Overview">Overview</a>
- <ol>
- <li><a href="#Filename">File name format</a></li>
- <li><a href="#StorageLocation">Storage location</a></li>
- <li><a href="#DownloadProcess">Download process</a></li>
- <li><a href="#Checklist">Development checklist</a></li>
- </ol>
- </li>
- <li><a href="#Rules">Rules and Limitations</a></li>
- <li><a href="#Downloading">Downloading the Expansion Files</a>
- <ol>
- <li><a href="#AboutLibraries">About the Downloader Library</a></li>
- <li><a href="#Preparing">Preparing to use the Downloader Library</a></li>
- <li><a href="#Permissions">Declaring user permissions</a></li>
- <li><a href="#DownloaderService">Implementing the downloader service</a></li>
- <li><a href="#AlarmReceiver">Implementing the alarm receiver</a></li>
- <li><a href="#Download">Starting the download</a></li>
- <li><a href="#Progress">Receiving download progress</a></li>
- </ol>
- </li>
- <li><a href="#ExpansionPolicy">Using APKExpansionPolicy</a></li>
- <li><a href="#ReadingTheFile">Reading the Expansion File</a>
- <ol>
- <li><a href="#GettingFilenames">Getting the file names</a></li>
- <li><a href="#ZipLib">Using the APK Expansion Zip Library</a></li>
- </ol>
- </li>
- <li><a href="#Testing">Testing Your Expansion Files</a>
- <ol>
- <li><a href="#TestingReading">Testing file reads</a></li>
- <li><a href="#TestingReading">Testing file downloads</a></li>
- </ol>
- </li>
- <li><a href="#Updating">Updating Your Application</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
- <li><a href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a></li>
- <li><a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple
-APK Support</a></li>
-</ol>
-</div>
-</div>
-
-
-
-<p>Google Play currently requires that your APK file be no more than 50MB. For most
-applications, this is plenty of space for all the application's code and assets.
-However, some apps need more space for high-fidelity graphics, media files, or other large assets.
-Previously, if your app exceeded 50MB, you had to host and download the additional resources
-yourself when the user opens the app. Hosting and serving the extra files can be costly, and the
-user experience is often less than ideal. To make this process easier for you and more pleasant
-for users, Google Play allows you to attach two large expansion files that supplement your
-APK.</p>
-
-<p>Google Play hosts the expansion files for your application and serves them to the device at
-no cost to you. The expansion files are saved to the device's shared storage location (the
-SD card or USB-mountable partition; also known as the "external" storage) where your app can access
-them. On most devices, Google Play downloads the expansion file(s) at the same time it
-downloads the APK, so your application has everything it needs when the user opens it for the
-first time. In some cases, however, your application must download the files from Google Play
-when your application starts.</p>
-
-
-
-<h2 id="Overview">Overview</h2>
-
-<p>Each time you upload an APK using the Google Play Android Developer Console, you have the option to
-add one or two expansion files to the APK. Each file can be up to 2GB and it can be any format you
-choose, but we recommend you use a compressed file to conserve bandwidth during the download.
-Conceptually, each expansion file plays a different role:</p>
-
-<ul>
- <li>The <strong>main</strong> expansion file is the
-primary expansion file for additional resources required by your application.</li>
- <li>The <strong>patch</strong> expansion file is optional and intended for small updates to the
-main expansion file.</li>
-</ul>
-
-<p>While you can use the two expansion files any way you wish, we recommend that the main
-expansion file deliver the primary assets and should rarely if ever updated; the patch expansion
-file should be smaller and serve as a “patch carrier,” getting updated with each major
-release or as necessary.</p>
-
-<p>However, even if your application update requires only a new patch expansion file, you still must
-upload a new APK with an updated <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-versionCode}</a> in the manifest. (The
-Developer Console does not allow you to upload an expansion file to an existing APK.)</p>
-
-<p class="note"><strong>Note:</strong> The patch expansion file is semantically the same as the
-main expansion file&mdash;you can use each file any way you want. The system does
-not use the patch expansion file to perform patching for your app. You must perform patching
-yourself or be able to distinguish between the two files.</p>
-
-
-
-<h3 id="Filename">File name format</h3>
-
-<p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). You can also
-use the <a href="{@docRoot}tools/help/jobb.html">JOBB</a> tool to encapsulate and encrypt a set
-of resource files and subsequent patches for that set. Regardless of the file type, Google Play
-considers them opaque binary blobs and renames the files using the following scheme:</p>
-
-<pre class="classic no-pretty-print">
-[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
-</pre>
-
-<p>There are three components to this scheme:</p>
-
-<dl>
- <dt>{@code main} or {@code patch}</dt>
- <dd>Specifies whether the file is the main or patch expansion file. There can be
-only one main file and one patch file for each APK.</dd>
- <dt>{@code &lt;expansion-version&gt;}</dt>
- <dd>This is an integer that matches the version code of the APK with which the expansion is
-<em>first</em> associated (it matches the application's <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
-value).
- <p>"First" is emphasized because although the Developer Console allows you to
-re-use an uploaded expansion file with a new APK, the expansion file's name does not change&mdash;it
-retains the version applied to it when you first uploaded the file.</p></dd>
- <dt>{@code &lt;package-name&gt;}</dt>
- <dd>Your application's Java-style package name.</dd>
-</dl>
-
-<p>For example, suppose your APK version is 314159 and your package name is com.example.app. If you
-upload a main expansion file, the file is renamed to:</p>
-<pre class="classic no-pretty-print">main.314159.com.example.app.obb</pre>
-
-
-<h3 id="StorageLocation">Storage location</h3>
-
-<p>When Google Play downloads your expansion files to a device, it saves them to the system's
-shared storage location. To ensure proper behavior, you must not delete, move, or rename the
-expansion files. In the event that your application must perform the download from Google Play
-itself, you must save the files to the exact same location.</p>
-
-<p>The specific location for your expansion files is:</p>
-
-<pre class="classic no-pretty-print">
-&lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/
-</pre>
-
-<ul>
- <li>{@code &lt;shared-storage&gt;} is the path to the shared storage space, available from
-{@link android.os.Environment#getExternalStorageDirectory()}.</li>
- <li>{@code &lt;package-name&gt;} is your application's Java-style package name, available
-from {@link android.content.Context#getPackageName()}.</li>
-</ul>
-
-<p>For each application, there are never more than two expansion files in this directory.
-One is the main expansion file and the other is the patch expansion file (if necessary). Previous
-versions are overwritten when you update your application with new expansion files.</p>
-
-<p>If you must unpack the contents of your expansion files, <strong>do not</strong> delete the
-{@code .obb} expansion files afterwards and <strong>do not</strong> save the unpacked data
-in the same directory. You should save your unpacked files in the directory
-specified by {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}. However,
-if possible, it's best if you use an expansion file format that allows you to read directly from
-the file instead of requiring you to unpack the data. For example, we've provided a library
-project called the <a href="#ZipLib">APK Expansion Zip Library</a> that reads your data directly
-from the ZIP file.</p>
-
-<p class="note"><strong>Note:</strong> Unlike APK files, any files saved on the shared storage can
-be read by the user and other applications.</p>
-
-<p class="note"><strong>Tip:</strong> If you're packaging media files into a ZIP, you can use media
-playback calls on the files with offset and length controls (such as {@link
-android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
-{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}) without the
-need to unpack your ZIP. In order for this to work, you must not perform additional compression on
-the media files when creating the ZIP packages. For example, when using the <code>zip</code> tool,
-you should use the <code>-n</code> option to specify the file suffixes that should not be
-compressed: <br/>
-<code>zip -n .mp4;.ogg main_expansion media_files</code></p>
-
-
-<h3 id="DownloadProcess">Download process</h3>
-
-<p>Most of the time, Google Play downloads and saves your expansion files at the same time it
-downloads the APK to the device. However, in some cases Google Play
-cannot download the expansion files or the user might have deleted previously downloaded expansion
-files. To handle these situations, your app must be able to download the files
-itself when the main activity starts, using a URL provided by Google Play.</p>
-
-<p>The download process from a high level looks like this:</p>
-
-<ol>
- <li>User selects to install your app from Google Play.</li>
- <li>If Google Play is able to download the expansion files (which is the case for most
-devices), it downloads them along with the APK.
- <p>If Google Play is unable to download the expansion files, it downloads the
-APK only.</p>
- </li>
- <li>When the user launches your application, your app must check whether the expansion files are
-already saved on the device.
- <ol>
- <li>If yes, your app is ready to go.</li>
- <li>If no, your app must download the expansion files over HTTP from Google Play. Your app
-must send a request to the Google Play client using the Google Play's <a
-href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service, which
-responds with the name, file size, and URL for each expansion file. With this information, you then
-download the files and save them to the proper <a href="#StorageLocation">storage location</a>.</li>
- </ol>
- </li>
-</ol>
-
-<p class="caution"><strong>Caution:</strong> It is critical that you include the necessary code to
-download the expansion files from Google Play in the event that the files are not already on the
-device when your application starts. As discussed in the following section about <a
-href="#Downloading">Downloading the Expansion Files</a>, we've made a library available to you that
-greatly simplifies this process and performs the download from a service with a minimal amount of
-code from you.</p>
-
-
-
-
-<h3 id="Checklist">Development checklist</h3>
-
-<p>Here's a summary of the tasks you should perform to use expansion files with your
-application:</p>
-
-<ol>
- <li>First determine whether your application absolutely requires more than 50MB per installation.
-Space is precious and you should keep your total application size as small as possible. If your app
-uses more than 50MB in order to provide multiple versions of your graphic assets for multiple screen
-densities, consider instead publishing <a
-href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in which each APK
-contains only the assets required for the screens that it targets.</li>
- <li>Determine which application resources to separate from your APK and package them in a
-file to use as the main expansion file.
- <p>Normally, you should only use the second patch expansion file when performing updates to
-the main expansion file. However, if your resources exceed the 2GB limit for the main
-expansion file, you can use the patch file for the rest of your assets.</p>
- </li>
- <li>Develop your application such that it uses the resources from your expansion files in the
-device's <a href="#StorageLocation">shared storage location</a>.
- <p>Remember that you must not delete, move, or rename the expansion files.</p>
- <p>If your application doesn't demand a specific format, we suggest you create ZIP files for
-your expansion files, then read them using the <a href="#ZipLib">APK Expansion Zip
-Library</a>.</p>
- </li>
- <li>Add logic to your application's main activity that checks whether the expansion files
-are on the device upon start-up. If the files are not on the device, use Google Play's <a
-href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service to request URLs
-for the expansion files, then download and save them.
- <p>To greatly reduce the amount of code you must write and ensure a good user experience
-during the download, we recommend you use the <a href="#AboutLibraries">Downloader
-Library</a> to implement your download behavior.</p>
- <p>If you build your own download service instead of using the library, be aware that you
-must not change the name of the expansion files and must save them to the proper
-<a href="#StorageLocation">storage location</a>.</p></li>
-</ol>
-
-<p>Once you've finished your application development, follow the guide to <a href="#Testing">Testing
-Your Expansion Files</a>.</p>
-
-
-
-
-
-
-<h2 id="Rules">Rules and Limitations</h2>
-
-<p>Adding APK expansion files is a feature available when you upload your application using the
-Developer Console. When uploading your application for the first time or updating an
-application that uses expansion files, you must be aware of the following rules and limitations:</p>
-
-<ol type="I">
- <li>Each expansion file can be no more than 2GB.</li>
- <li>In order to download your expansion files from Google Play, <strong>the user must have
-acquired your application from Google Play</strong>. Google Play will not
-provide the URLs for your expansion files if the application was installed by other means.</li>
- <li>When performing the download from within your application, the URL that Google Play
-provides for each file is unique for every download and each one expires shortly after it is given
-to your application.</li>
- <li>If you update your application with a new APK or upload <a
-href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> for the same
-application, you can select expansion files that you've uploaded for a previous APK. <strong>The
-expansion file's name does not change</strong>&mdash;it retains the version received by the APK to
-which the file was originally associated.</li>
- <li>If you use expansion files in combination with <a
-href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in order to
-provide different expansion files for different devices, you still must upload separate APKs
-for each device in order to provide a unique <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a>
-value and declare different <a href="{@docRoot}guide/google/play/filters.html">filters</a> for
-each APK.</li>
- <li>You cannot issue an update to your application by changing the expansion files
-alone&mdash;<strong>you must upload a new APK</strong> to update your app. If your changes only
-concern the assets in your expansion files, you can update your APK simply by changing the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> (and
-perhaps also the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
-versionName}</a>).</p></li>
- <li><strong>Do not save other data into your <code>obb/</code>
-directory</strong>. If you must unpack some data, save it into the location specified by {@link
-android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
- <li><strong>Do not delete or rename the {@code .obb} expansion file</strong> (unless you're
-performing an update). Doing so will cause Google Play (or your app itself) to repeatedly
-download the expansion file.</li>
- <li>When updating an expansion file manually, you must delete the previous expansion file.</li>
-</ol>
-
-
-
-
-
-
-
-
-
-<h2 id="Downloading">Downloading the Expansion Files</h2>
-
-<p>In most cases, Google Play downloads and saves your expansion files to the device at the same
-time it installs or updates the APK. This way, the expansion files are available when your
-application launches for the first time. However, in some cases your app must download the
-expansion files itself by requesting them from a URL provided to you in a response
-from Google Play's <a
-href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service.</p>
-
-<p>The basic logic you need to download your expansion files is the following:</p>
-
-<ol>
- <li>When your application starts, look for the expansion files on the <a
-href="#StorageLocation">shared storage location</a> (in the
-<code>Android/obb/&lt;package-name&gt;/</code> directory).
- <ol type="a">
- <li>If the expansion files are there, you're all set and your application can continue.</li>
- <li>If the expansion files are <em>not</em> there:
- <ol>
- <li>Perform a request using Google Play's <a
-href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> to get your
-app's expansion file names, sizes, and URLs.</li>
- <li>Use the URLs provided by Google Play to download the expansion files and save
-the expansion files. You <strong>must</strong> save the files to the <a
-href="#StorageLocation">shared storage location</a>
-(<code>Android/obb/&lt;package-name&gt;/</code>) and use the exact file name provided
-by Google Play's response.
- <p class="note"><strong>Note:</strong> The URL that Google Play provides for your
-expansion files is unique for every download and each one expires shortly after it is given to
-your application.</p>
- </li>
- </ol>
- </li>
- </ol>
- </li>
-</ol>
-
-
-<p>If your application is free (not a paid app), then you probably haven't used the <a
-href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service. It's primarily
-designed for you to enforce
-licensing policies for your application and ensure that the user has the right to
-use your app (he or she rightfully paid for it on Google Play). In order to facilitate the
-expansion file functionality, the licensing service has been enhanced to provide a response
-to your application that includes the URL of your application's expansion files that are hosted
-on Google Play. So, even if your application is free for users, you need to include the
-License Verification Library (LVL) to use APK expansion files. Of course, if your application
-is free, you don't need to enforce license verification&mdash;you simply need the
-library to perform the request that returns the URL of your expansion files.</p>
-
-<p class="note"><strong>Note:</strong> Whether your application is free or not, Google Play
-returns the expansion file URLs only if the user acquired your application from Google Play.</p>
-
-<p>In addition to the LVL, you need a set of code that downloads the expansion files
-over an HTTP connection and saves them to the proper location on the device's shared storage.
-As you build this procedure into your application, there are several issues you should take into
-consideration:</p>
-
-<ul>
- <li>The device might not have enough space for the expansion files, so you should check
-before beginning the download and warn the user if there's not enough space.</li>
- <li>File downloads should occur in a background service in order to avoid blocking the user
-interaction and allow the user to leave your app while the download completes.</li>
- <li>A variety of errors might occur during the request and download that you must
-gracefully handle.</li>
- <li>Network connectivity can change during the download, so you should handle such changes and
-if interrupted, resume the download when possible.</li>
- <li>While the download occurs in the background, you should provide a notification that
-indicates the download progress, notifies the user when it's done, and takes the user back to
-your application when selected.</li>
-</ul>
-
-
-<p>To simplify this work for you, we've built the <a href="#AboutLibraries">Downloader Library</a>,
-which requests the expansion file URLs through the licensing service, downloads the expansion files,
-performs all of the tasks listed above, and even allows your activity to pause and resume the
-download. By adding the Downloader Library and a few code hooks to your application, almost all the
-work to download the expansion files is already coded for you. As such, in order to provide the best
-user experience with minimal effort on your behalf, we recommend you use the Downloader Library to
-download your expansion files. The information in the following sections explain how to integrate
-the library into your application.</p>
-
-<p>If you'd rather develop your own solution to download the expansion files using the Google
-Play URLs, you must follow the <a href="{@docRoot}guide/google/play/licensing/index.html">Application
-Licensing</a> documentation to perform a license request, then retrieve the expansion file names,
-sizes, and URLs from the response extras. You should use the <a href="#ExpansionPolicy">{@code
-APKExpansionPolicy}</a> class (included in the License Verification Library) as your licensing
-policy, which captures the expansion file names, sizes, and URLs from the licensing service..</p>
-
-
-
-<h3 id="AboutLibraries">About the Downloader Library</h3>
-
-<p>To use APK expansion files with your application and provide the best user experience with
-minimal effort on your behalf, we recommend you use the Downloader Library that's included in the
-Google Play APK Expansion Library package. This library downloads your expansion files in a
-background service, shows a user notification with the download status, handles network
-connectivity loss, resumes the download when possible, and more.</p>
-
-<p>To implement expansion file downloads using the Downloader Library, all you need to do is:</p>
-
-<ul>
- <li>Extend a special {@link android.app.Service} subclass and {@link
-android.content.BroadcastReceiver} subclass that each require just a few
-lines of code from you.</li>
- <li>Add some logic to your main activity that checks whether the expansion files have
-already been downloaded and, if not, invokes the download process and displays a
-progress UI.</li>
- <li>Implement a callback interface with a few methods in your main activity that
-receives updates about the download progress.</li>
-</ul>
-
-<p>The following sections explain how to set up your app using the Downloader Library.</p>
-
-
-<h3 id="Preparing">Preparing to use the Downloader Library</h3>
-
-<p>To use the Downloader Library, you need to
-download two packages from the SDK Manager and add the appropriate libraries to your
-application.</p>
-
-<p>First, open the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>, expand
-<em>Extras</em> and download:</p>
-<ul>
- <li><em>Google Play Licensing Library package</em></li>
- <li><em>Google Play APK Expansion Library package</em></li>
-</ul>
-
-<p>If you're using Eclipse, create a project for each library and add it to your app:</p>
-<ol>
- <li>Create a new Library Project for the License Verification Library and Downloader
-Library. For each library:
- <ol>
- <li>Begin a new Android project.</li>
- <li>Select <strong>Create project from existing
-source</strong> and choose the library from the {@code &lt;sdk&gt;/extras/google/} directory
-({@code market_licensing/} for the License Verification Library or {@code
-market_apk_expansion/downloader_library/} for the Downloader Library).</li>
- <li>Specify a <em>Project Name</em> such as "Google Play License Library" and "Google Play
-Downloader
-Library"</li>
- <li>Click <strong>Finish</strong>.</li>
- </ol>
-<p class="note"><strong>Note:</strong> The Downloader Library depends on the License
-Verification Library. Be sure to add the License
-Verification Library to the Downloader Library's project properties (same process as
-steps 2 and 3 below).</p>
- </li>
- <li>Right-click the Android project in which you want to use APK expansion files and
-select <strong>Properties</strong>.</li>
- <li>In the <em>Library</em> panel, click <strong>Add</strong> to select and add each of the
-libraries to your application.</li>
-</ol>
-
-<p>Or, from a command line, update your project to include the libraries:</p>
-<ol>
- <li>Change directories to the <code>&lt;sdk&gt;/tools/</code> directory.</li>
- <li>Execute <code>android update project</code> with the {@code --library} option to add both the
-LVL and the Downloader Library to your project. For example:
-<pre class="no-pretty-print">
-android update project --path ~/Android/MyApp \
---library ~/android_sdk/extras/google/market_licensing \
---library ~/android_sdk/extras/google/market_apk_expansion/downloader_library
-</pre>
- </li>
-</ol>
-
-<p>With both the License Verification Library and Downloader Library added to your
-application, you'll be able to quickly integrate the ability to download expansion files from
-Google Play. The format that you choose for the expansion files and how you read them
-from the shared storage is a separate implementation that you should consider based on your
-application needs.</p>
-
-<p class="note"><strong>Tip:</strong> The Apk Expansion package includes a sample
-application
-that shows how to use the Downloader Library in an app. The sample uses a third library
-available in the Apk Expansion package called the APK Expansion Zip Library. If
-you plan on
-using ZIP files for your expansion files, we suggest you also add the APK Expansion Zip Library to
-your application. For more information, see the section below
-about <a href="#ZipLib">Using the APK Expansion Zip Library</a>.</p>
-
-
-
-<h3 id="Permissions">Declaring user permissions</h3>
-
-<p>In order to download the expansion files, the Downloader Library
-requires several permissions that you must declare in your application's manifest file. They
-are:</p>
-
-<pre>
-&lt;manifest ...>
- &lt;!-- Required to access Google Play Licensing -->
- &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" />
-
- &lt;!-- Required to download files from Google Play -->
- &lt;uses-permission android:name="android.permission.INTERNET" />
-
- &lt;!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->
- &lt;uses-permission android:name="android.permission.WAKE_LOCK" />
-
- &lt;!-- Required to poll the state of the network connection and respond to changes -->
- &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
- &lt;!-- Required to check whether Wi-Fi is enabled -->
- &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-
- &lt;!-- Required to read and write the expansion files on shared storage -->
- &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- ...
-&lt;/manifest>
-</pre>
-
-<p class="note"><strong>Note:</strong> By default, the Downloader Library requires API
-level 4, but the APK Expansion Zip Library requires API level 5.</p>
-
-
-<h3 id="DownloaderService">Implementing the downloader service</h3>
-
-<p>In order to perform downloads in the background, the Downloader Library provides its
-own {@link android.app.Service} subclass called {@code DownloaderService} that you should extend. In
-addition to downloading the expansion files for you, the {@code DownloaderService} also:</p>
-
-<ul>
- <li>Registers a {@link android.content.BroadcastReceiver} that listens for changes to the
-device's network connectivity (the {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}
-broadcast) in order to pause the download when necessary (such as due to connectivity loss) and
-resume the download when possible (connectivity is acquired).</li>
- <li>Schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm to retry the download for
-cases in which the service gets killed.</li>
- <li>Builds a custom {@link android.app.Notification} that displays the download progress and
-any errors or state changes.</li>
- <li>Allows your application to manually pause and resume the download.</li>
- <li>Verifies that the shared storage is mounted and available, that the files don't already exist,
-and that there is enough space, all before downloading the expansion files. Then notifies the user
-if any of these are not true.</li>
-</ul>
-
-<p>All you need to do is create a class in your application that extends the {@code
-DownloaderService} class and override three methods to provide specific application details:</p>
-
-<dl>
- <dt>{@code getPublicKey()}</dt>
- <dd>This must return a string that is the Base64-encoded RSA public key for your publisher
-account, available from the profile page on the Developer Console (see <a
-href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>).</dd>
- <dt>{@code getSALT()}</dt>
- <dd>This must return an array of random bytes that the licensing {@code Policy} uses to
-create an <a
-href="{@docRoot}guide/google/play/licensing/adding-licensing.html#impl-Obfuscator">{@code
-Obfuscator}</a>. The salt ensures that your obfuscated {@link android.content.SharedPreferences}
-file in which your licensing data is saved will be unique and non-discoverable.</dd>
- <dt>{@code getAlarmReceiverClassName()}</dt>
- <dd>This must return the class name of the {@link android.content.BroadcastReceiver} in
-your application that should receive the alarm indicating that the download should be
-restarted (which might happen if the downloader service unexpectedly stops).</dd>
-</dl>
-
-<p>For example, here's a complete implementation of {@code DownloaderService}:</p>
-
-<pre>
-public class SampleDownloaderService extends DownloaderService {
- // You must use the public key belonging to your publisher account
- public static final String BASE64_PUBLIC_KEY = "YourLVLKey";
- // You should also modify this salt
- public static final byte[] SALT = new byte[] { 1, 42, -12, -1, 54, 98,
- -100, -12, 43, 2, -8, -4, 9, 5, -106, -107, -33, 45, -1, 84
- };
-
- &#64;Override
- public String getPublicKey() {
- return BASE64_PUBLIC_KEY;
- }
-
- &#64;Override
- public byte[] getSALT() {
- return SALT;
- }
-
- &#64;Override
- public String getAlarmReceiverClassName() {
- return SampleAlarmReceiver.class.getName();
- }
-}
-</pre>
-
-<p class="caution"><strong>Notice:</strong> You must update the {@code BASE64_PUBLIC_KEY} value
-to be the public key belonging to your publisher account. You can find the key in the Developer
-Console under your profile information. This is necessary even when testing
-your downloads.</p>
-
-<p>Remember to declare the service in your manifest file:</p>
-<pre>
-&lt;application ...>
- &lt;service android:name=".SampleDownloaderService" />
- ...
-&lt;/application>
-</pre>
-
-
-
-<h3 id="AlarmReceiver">Implementing the alarm receiver</h3>
-
-<p>In order to monitor the progress of the file downloads and restart the download if necessary, the
-{@code DownloaderService} schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm that
-delivers an {@link android.content.Intent} to a {@link android.content.BroadcastReceiver} in your
-application. You must define the {@link android.content.BroadcastReceiver} to call an API
-from the Downloader Library that checks the status of the download and restarts
-it if necessary.</p>
-
-<p>You simply need to override the {@link android.content.BroadcastReceiver#onReceive
-onReceive()} method to call {@code
-DownloaderClientMarshaller.startDownloadServiceIfRequired()}.</p>
-
-<p>For example:</p>
-
-<pre>
-public class SampleAlarmReceiver extends BroadcastReceiver {
- &#64;Override
- public void onReceive(Context context, Intent intent) {
- try {
- DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent,
- SampleDownloaderService.class);
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
- }
-}
-</pre>
-
-<p>Notice that this is the class for which you must return the name
-in your service's {@code getAlarmReceiverClassName()} method (see the previous section).</p>
-
-<p>Remember to declare the receiver in your manifest file:</p>
-<pre>
-&lt;application ...>
- &lt;receiver android:name=".SampleAlarmReceiver" />
- ...
-&lt;/application>
-</pre>
-
-
-
-<h3 id="Download">Starting the download</h3>
-
-<p>The main activity in your application (the one started by your launcher icon) is
-responsible for verifying whether the expansion files are already on the device and initiating
-the download if they are not.</p>
-
-<p>Starting the download using the Downloader Library requires the following
-procedures:</p>
-
-<ol>
- <li>Check whether the files have been downloaded.
- <p>The Downloader Library includes some APIs in the {@code Helper} class to
-help with this process:</p>
- <ul>
- <li>{@code getExtendedAPKFileName(Context, c, boolean mainFile, int
-versionCode)}</li>
- <li>{@code doesFileExist(Context c, String fileName, long fileSize)}</li>
- </ul>
- <p>For example, the sample app provided in the Apk Expansion package calls the
-following method in the activity's {@link android.app.Activity#onCreate onCreate()} method to check
-whether the expansion files already exist on the device:</p>
-<pre>
-boolean expansionFilesDelivered() {
- for (XAPKFile xf : xAPKS) {
- String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, xf.mFileVersion);
- if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
- return false;
- }
- return true;
-}
-</pre>
- <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known
-expansion file and a boolean as to whether it's the main expansion file. (See the sample
-application's {@code SampleDownloaderActivity} class for details.)</p>
- <p>If this method returns false, then the application must begin the download.</p>
- </li>
- <li>Start the download by calling the static method {@code
-DownloaderClientMarshaller.startDownloadServiceIfRequired(Context c, PendingIntent
-notificationClient, Class&lt;?> serviceClass)}.
- <p>The method takes the following parameters:</p>
- <ul>
- <li><code>context</code>: Your application's {@link android.content.Context}.</li>
- <li><code>notificationClient</code>: A {@link android.app.PendingIntent} to start your main
-activity. This is used in the {@link android.app.Notification} that the {@code DownloaderService}
-creates to show the download progress. When the user selects the notification, the system
-invokes the {@link android.app.PendingIntent} you supply here and should open the activity
-that shows the download progress (usually the same activity that started the download).</li>
- <li><code>serviceClass</code>: The {@link java.lang.Class} object for your implementation of
-{@code DownloaderService}, required to start the service and begin the download if necessary.</li>
- </ul>
- <p>The method returns an integer that indicates
-whether or not the download is required. Possible values are:</p>
- <ul>
- <li>{@code NO_DOWNLOAD_REQUIRED}: Returned if the files already
-exist or a download is already in progress.</li>
- <li>{@code LVL_CHECK_REQUIRED}: Returned if a license verification is
-required in order to acquire the expansion file URLs.</li>
- <li>{@code DOWNLOAD_REQUIRED}: Returned if the expansion file URLs are already known,
-but have not been downloaded.</li>
- </ul>
- <p>The behavior for {@code LVL_CHECK_REQUIRED} and {@code DOWNLOAD_REQUIRED} are essentially the
-same and you normally don't need to be concerned about them. In your main activity that calls {@code
-startDownloadServiceIfRequired()}, you can simply check whether or not the response is {@code
-NO_DOWNLOAD_REQUIRED}. If the response is anything <em>other than</em> {@code NO_DOWNLOAD_REQUIRED},
-the Downloader Library begins the download and you should update your activity UI to
-display the download progress (see the next step). If the response <em>is</em> {@code
-NO_DOWNLOAD_REQUIRED}, then the files are available and your application can start.</p>
- <p>For example:</p>
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
- // Check if expansion files are available before going any further
- if (!expansionFilesDelivered()) {
- // Build an Intent to start this activity from the Notification
- Intent notifierIntent = new Intent(this, MainActivity.getClass());
- notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
- Intent.FLAG_ACTIVITY_CLEAR_TOP);
- ...
- PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
- notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
- // Start the download service (if required)
- int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
- pendingIntent, SampleDownloaderService.class);
- // If download has started, initialize this activity to show download progress
- if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
- // This is where you do set up to display the download progress (next step)
- ...
- return;
- } // If the download wasn't necessary, fall through to start the app
- }
- startApp(); // Expansion files are available, start the app
-}
-</pre>
- </li>
- <li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other
-than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by
-calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class&lt;?>
-downloaderService)}. The {@code IStub} provides a binding between your activity to the downloader
-service such that your activity receives callbacks about the download progress.
- <p>In order to instantiate your {@code IStub} by calling {@code CreateStub()}, you must pass it
-an implementation of the {@code IDownloaderClient} interface and your {@code DownloaderService}
-implementation. The next section about <a href="#Progress">Receiving download progress</a> discusses
-the {@code IDownloaderClient} interface, which you should usually implement in your {@link
-android.app.Activity} class so you can update the activity UI when the download state changes.</p>
- <p>We recommend that you call {@code
-CreateStub()} to instantiate your {@code IStub} during your activity's {@link
-android.app.Activity#onCreate onCreate()} method, after {@code startDownloadServiceIfRequired()}
-starts the download. </p>
- <p>For example, in the previous code sample for {@link android.app.Activity#onCreate
-onCreate()}, you can respond to the {@code startDownloadServiceIfRequired()} result like this:</p>
-<pre>
- // Start the download service (if required)
- int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
- pendingIntent, SampleDownloaderService.class);
- // If download has started, initialize activity to show progress
- if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
- // Instantiate a member instance of IStub
- mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,
- SampleDownloaderService.class);
- // Inflate layout that shows download progress
- setContentView(R.layout.downloader_ui);
- return;
- }
-</pre>
-
- <p>After the {@link android.app.Activity#onCreate onCreate()} method returns, your activity
-receives a call to {@link android.app.Activity#onResume onResume()}, which is where you should then
-call {@code connect()} on the {@code IStub}, passing it your application's {@link
-android.content.Context}. Conversely, you should call
-{@code disconnect()} in your activity's {@link android.app.Activity#onStop onStop()} callback.</p>
-<pre>
-&#64;Override
-protected void onResume() {
- if (null != mDownloaderClientStub) {
- mDownloaderClientStub.connect(this);
- }
- super.onResume();
-}
-
-&#64;Override
-protected void onStop() {
- if (null != mDownloaderClientStub) {
- mDownloaderClientStub.disconnect(this);
- }
- super.onStop();
-}
-</pre>
- <p>Calling {@code connect()} on the {@code IStub} binds your activity to the {@code
-DownloaderService} such that your activity receives callbacks regarding changes to the download
-state through the {@code IDownloaderClient} interface.</p>
- </li>
-</ol>
-
-
-
-<h3 id="Progress">Receiving download progress</h3>
-
-<p>To receive updates regarding the download progress and to interact with the {@code
-DownloaderService}, you must implement the Downloader Library's {@code IDownloaderClient} interface.
-Usually, the activity you use to start the download should implement this interface in order to
-display the download progress and send requests to the service.</p>
-
-<p>The required interface methods for {@code IDownloaderClient} are:</p>
-
-<dl>
- <dt>{@code onServiceConnected(Messenger m)}</dt>
- <dd>After you instantiate the {@code IStub} in your activity, you'll receive a call to this
-method, which passes a {@link android.os.Messenger} object that's connected with your instance
-of {@code DownloaderService}. To send requests to the service, such as to pause and resume
-downloads, you must call {@code DownloaderServiceMarshaller.CreateProxy()} to receive the {@code
-IDownloaderService} interface connected to the service.
- <p>A recommended implementation looks like this:</p>
-<pre>
-private IDownloaderService mRemoteService;
-...
-
-&#64;Override
-public void onServiceConnected(Messenger m) {
- mRemoteService = DownloaderServiceMarshaller.CreateProxy(m);
- mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());
-}
-</pre>
- <p>With the {@code IDownloaderService} object initialized, you can send commands to the
-downloader service, such as to pause and resume the download ({@code requestPauseDownload()}
-and {@code requestContinueDownload()}).</p>
-</dd>
- <dt>{@code onDownloadStateChanged(int newState)}</dt>
- <dd>The download service calls this when a change in download state occurs, such as the
-download begins or completes.
- <p>The <code>newState</code> value will be one of several possible values specified in
-by one of the {@code IDownloaderClient} class's {@code STATE_*} constants.</p>
- <p>To provide a useful message to your users, you can request a corresponding string
-for each state by calling {@code Helpers.getDownloaderStringResourceIDFromState()}. This
-returns the resource ID for one of the strings bundled with the Downloader
-Library. For example, the string "Download paused because you are roaming" corresponds to {@code
-STATE_PAUSED_ROAMING}.</p></dd>
- <dt>{@code onDownloadProgress(DownloadProgressInfo progress)}</dt>
- <dd>The download service calls this to deliver a {@code DownloadProgressInfo} object,
-which describes various information about the download progress, including estimated time remaining,
-current speed, overall progress, and total so you can update the download progress UI.</dd>
-</dl>
-<p class="note"><strong>Tip:</strong> For examples of these callbacks that update the download
-progress UI, see the {@code SampleDownloaderActivity} in the sample app provided with the
-Apk Expansion package.</p>
-
-<p>Some public methods for the {@code IDownloaderService} interface you might find useful are:</p>
-
-<dl>
- <dt>{@code requestPauseDownload()}</dt>
- <dd>Pauses the download.</dd>
- <dt>{@code requestContinueDownload()}</dt>
- <dd>Resumes a paused download.</dd>
- <dt>{@code setDownloadFlags(int flags)}</dt>
- <dd>Sets user preferences for network types on which its OK to download the files. The
-current implementation supports one flag, {@code FLAGS_DOWNLOAD_OVER_CELLULAR}, but you can add
-others. By default, this flag is <em>not</em> enabled, so the user must be on Wi-Fi to download
-expansion files. You might want to provide a user preference to enable downloads over
-the cellular network. In which case, you can call:
-<pre>
-mRemoteService.setDownloadFlags(IDownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR);
-</pre>
-</dd>
-</dl>
-
-
-
-
-<h2 id="ExpansionPolicy">Using APKExpansionPolicy</h2>
-
-<p>If you decide to build your own downloader service instead of using the Google Play
-<a href="#AboutLibraries">Downloader Library</a>, you should still use the {@code
-APKExpansionPolicy} that's provided in the License Verification Library. The {@code
-APKExpansionPolicy} class is nearly identical to {@code ServerManagedPolicy} (available in the
-Google Play License Verification Library) but includes additional handling for the APK expansion
-file response extras.</p>
-
-<p class="note"><strong>Note:</strong> If you <em>do use</em> the <a
-href="#AboutLibraries">Downloader Library</a> as discussed in the previous section, the
-library performs all interaction with the {@code APKExpansionPolicy} so you don't have to use
-this class directly.</p>
-
-<p>The class includes methods to help you get the necessary information about the available
-expansion files:</p>
-
-<ul>
- <li>{@code getExpansionURLCount()}</li>
- <li>{@code getExpansionURL(int index)}</li>
- <li>{@code getExpansionFileName(int index)}</li>
- <li>{@code getExpansionFileSize(int index)}</li>
-</ul>
-
-<p>For more information about how to use the {@code APKExpansionPolicy} when you're <em>not</em>
-using the <a
-href="#AboutLibraries">Downloader Library</a>, see the documentation for <a
-href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>,
-which explains how to implement a license policy such as this one.</p>
-
-
-
-
-
-
-
-<h2 id="ReadingTheFile">Reading the Expansion File</h2>
-
-<p>Once your APK expansion files are saved on the device, how you read your files
-depends on the type of file you've used. As discussed in the <a href="#Overview">overview</a>, your
-expansion files can be any kind of file you
-want, but are renamed using a particular <a href="#Filename">file name format</a> and are saved to
-{@code &lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/}.</p>
-
-<p>Regardless of how you read your files, you should always first check that the external
-storage is available for reading. There's a chance that the user has the storage mounted to a
-computer over USB or has actually removed the SD card.</p>
-
-<p class="note"><strong>Note:</strong> When your application starts, you should always check whether
-the external storage space is available and readable by calling {@link
-android.os.Environment#getExternalStorageState()}. This returns one of several possible strings
-that represent the state of the external storage. In order for it to be readable by your
-application, the return value must be {@link android.os.Environment#MEDIA_MOUNTED}.</p>
-
-
-<h3 id="GettingFilenames">Getting the file names</h3>
-
-<p>As described in the <a href="#Overview">overview</a>, your APK expansion files are saved
-using a specific file name format:</p>
-
-<pre class="classic no-pretty-print">
-[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
-</pre>
-
-<p>To get the location and names of your expansion files, you should use the
-{@link android.os.Environment#getExternalStorageDirectory()} and {@link
-android.content.Context#getPackageName()} methods to construct the path to your files.</p>
-
-<p>Here's a method you can use in your application to get an array containing the complete path
-to both your expansion files:</p>
-
-<pre>
-// The shared path to all app expansion files
-private final static String EXP_PATH = "/Android/obb/";
-
-static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {
- String packageName = ctx.getPackageName();
- Vector&lt;String> ret = new Vector&lt;String>();
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- // Build the full path to the app's expansion files
- File root = Environment.getExternalStorageDirectory();
- File expPath = new File(root.toString() + EXP_PATH + packageName);
-
- // Check that expansion file path exists
- if (expPath.exists()) {
- if ( mainVersion > 0 ) {
- String strMainPath = expPath + File.separator + "main." +
- mainVersion + "." + packageName + ".obb";
- File main = new File(strMainPath);
- if ( main.isFile() ) {
- ret.add(strMainPath);
- }
- }
- if ( patchVersion > 0 ) {
- String strPatchPath = expPath + File.separator + "patch." +
- mainVersion + "." + packageName + ".obb";
- File main = new File(strPatchPath);
- if ( main.isFile() ) {
- ret.add(strPatchPath);
- }
- }
- }
- }
- String[] retArray = new String[ret.size()];
- ret.toArray(retArray);
- return retArray;
-}
-</pre>
-
-<p>You can call this method by passing it your application {@link android.content.Context}
-and the desired expansion file's version.</p>
-
-<p>There are many ways you could determine the expansion file version number. One simple way is to
-save the version in a {@link android.content.SharedPreferences} file when the download begins, by
-querying the expansion file name with the {@code APKExpansionPolicy} class's {@code
-getExpansionFileName(int index)} method. You can then get the version code by reading the {@link
-android.content.SharedPreferences} file when you want to access the expansion
-file.</p>
-
-<p>For more information about reading from the shared storage, see the <a
-href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Data Storage</a>
-documentation.</p>
-
-
-
-<h3 id="ZipLib">Using the APK Expansion Zip Library</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
- <h3>Reading media files from a ZIP</h3>
- <p>If you're using your expansion files to store media files, a ZIP file still allows you to
-use Android media playback calls that provide offset and length controls (such as {@link
-android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
-{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}). In order for
-this to work, you must not perform additional compression on the media files when creating the ZIP
-packages. For example, when using the <code>zip</code> tool, you should use the <code>-n</code>
-option to specify the file suffixes that should not be compressed:</p>
-<p><code>zip -n .mp4;.ogg main_expansion media_files</code></p>
-</div>
-</div>
-
-<p>The Google Market Apk Expansion package includes a library called the APK
-Expansion Zip Library (located in {@code
-&lt;sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
-helps you read your expansion
-files when they're saved as ZIP files. Using this library allows you to easily read resources from
-your ZIP expansion files as a virtual file system.</p>
-
-<p>The APK Expansion Zip Library includes the following classes and APIs:</p>
-
-<dl>
- <dt>{@code APKExpansionSupport}</dt>
- <dd>Provides some methods to access expansion file names and ZIP files:
-
- <dl style="margin-top:1em">
- <dt>{@code getAPKExpansionFiles()}</dt>
- <dd>The same method shown above that returns the complete file path to both expansion
-files.</dd>
- <dt>{@code getAPKExpansionZipFile(Context ctx, int mainVersion, int
-patchVersion)}</dt>
- <dd>Returns a {@code ZipResourceFile} representing the sum of both the main file and
-patch file. That is, if you specify both the <code>mainVersion</code> and the
-<code>patchVersion</code>, this returns a {@code ZipResourceFile} that provides read access to
-all the data, with the patch file's data merged on top of the main file.</dd>
- </dl>
- </dd>
-
- <dt>{@code ZipResourceFile}</dt>
- <dd>Represents a ZIP file on the shared storage and performs all the work to provide a virtual
-file system based on your ZIP files. You can get an instance using {@code
-APKExpansionSupport.getAPKExpansionZipFile()} or with the {@code ZipResourceFile} by passing it the
-path to your expansion file. This class includes a variety of useful methods, but you generally
-don't need to access most of them. A couple of important methods are:
-
- <dl style="margin-top:1em">
- <dt>{@code getInputStream(String assetPath)}</dt>
- <dd>Provides an {@link java.io.InputStream} to read a file within the ZIP file. The
-<code>assetPath</code> must be the path to the desired file, relative to
-the root of the ZIP file contents.</dd>
- <dt>{@code getAssetFileDescriptor(String assetPath)}</dt>
- <dd>Provides an {@link android.content.res.AssetFileDescriptor} for a file within the
-ZIP file. The <code>assetPath</code> must be the path to the desired file, relative to
-the root of the ZIP file contents. This is useful for certain Android APIs that require an {@link
-android.content.res.AssetFileDescriptor}, such as some {@link android.media.MediaPlayer} APIs.</dd>
- </dl>
- </dd>
-
- <dt>{@code APEZProvider}</dt>
- <dd>Most applications don't need to use this class. This class defines a {@link
-android.content.ContentProvider} that marshals the data from the ZIP files through a content
-provider {@link android.net.Uri} in order to provide file access for certain Android APIs that
-expect {@link android.net.Uri} access to media files. For example, this is useful if you want to
-play a video with {@link android.widget.VideoView#setVideoURI VideoView.setVideoURI()}.</p></dd>
-</dl>
-
-<h4>Reading from a ZIP file</h4>
-
-<p>When using the APK Expansion Zip Library, reading a file from your ZIP usually requires the
-following:</p>
-
-<pre>
-// Get a ZipResourceFile representing a merger of both the main and patch files
-ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
- mainVersion, patchVersion);
-
-// Get an input stream for a known file inside the expansion file ZIPs
-InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
-</pre>
-
-<p>The above code provides access to any file that exists in either your main expansion file or
-patch expansion file, by reading from a merged map of all the files from both files. All you
-need to provide the {@code getAPKExpansionFile()} method is your application {@code
-android.content.Context} and the version number for both the main expansion file and patch
-expansion file.</p>
-
-<p>If you'd rather read from a specific expansion file, you can use the {@code
-ZipResourceFile} constructor with the path to the desired expansion file:</p>
-
-<pre>
-// Get a ZipResourceFile representing a specific expansion file
-ZipResourceFile expansionFile = new ZipResourceFile(filePathToMyZip);
-
-// Get an input stream for a known file inside the expansion file ZIPs
-InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
-</pre>
-
-<p>For more information about using this library for your expansion files, look at
-the sample application's {@code SampleDownloaderActivity} class, which includes additional code to
-verify the downloaded files using CRC. Beware that if you use this sample as the basis for
-your own implementation, it requires that you <strong>declare the byte size of your expansion
-files</strong> in the {@code xAPKS} array.</p>
-
-
-
-
-<h2 id="Testing">Testing Your Expansion Files</h2>
-
-<p>Before publishing your application, there are two things you should test: Reading the
-expansion files and downloading the files.</p>
-
-
-<h3 id="TestingReading">Testing file reads</h3>
-
-<p>Before you upload your application to Google Play, you
-should test your application's ability to read the files from the shared storage. All you need to do
-is add the files to the appropriate location on the device shared storage and launch your
-application:</p>
-
-<ol>
- <li>On your device, create the appropriate directory on the shared storage where Google
-Play will save your files.
- <p>For example, if your package name is {@code com.example.android}, you need to create
-the directory {@code Android/obb/com.example.android/} on the shared storage space. (Plug in
-your test device to your computer to mount the shared storage and manually create this
-directory.)</p>
- </li>
- <li>Manually add the expansion files to that directory. Be sure that you rename your files to
-match the <a href="#Filename">file name format</a> that Google Play will use.
- <p>For example, regardless of the file type, the main expansion file for the {@code
-com.example.android} application should be {@code main.0300110.com.example.android.obb}.
-The version code can be whatever value you want. Just remember:</p>
- <ul>
- <li>The main expansion file always starts with {@code main} and the patch file starts with
-{@code patch}.</li>
- <li>The package name always matches that of the APK to which the file is attached on
-Google Play.
- </ul>
- </li>
- <li>Now that the expansion file(s) are on the device, you can install and run your application to
-test your expansion file(s).</li>
-</ol>
-
-<p>Here are some reminders about handling the expansion files:</p>
-<ul>
- <li><strong>Do not delete or rename</strong> the {@code .obb} expansion files (even if you unpack
-the data to a different location). Doing so will cause Google Play (or your app itself) to
-repeatedly download the expansion file.</li>
- <li><strong>Do not save other data into your <code>obb/</code>
-directory</strong>. If you must unpack some data, save it into the location specified by {@link
-android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
-</ul>
-
-
-
-<h3 id="TestingReading">Testing file downloads</h3>
-
-<p>Because your application must sometimes manually download the expansion files when it first
-opens, it's important that you test this process to be sure your application can successfully query
-for the URLs, download the files, and save them to the device.</p>
-
-<p>To test your application's implementation of the manual download procedure, you must upload
-your application to Google Play as a "draft" to make your expansion files available for
-download:</p>
-
-<ol>
- <li>Upload your APK and corresponding expansion files using the Google Play Developer
-Console.</li>
- <li>Fill in the necessary application details (title, screenshots, etc.). You can come back and
-finalize these details before publishing your application.
- <p>Click the <strong>Save</strong> button. <em>Do not click Publish.</em> This saves
-the application as a draft, such that your application is not published for Google Play users,
-but the expansion files are available for you to test the download process.</p></li>
- <li>Install the application on your test device using the Eclipse tools or <a
-href="{@docRoot}tools/help/adb.html">{@code adb}</a>.</li>
- <li>Launch the app.</li>
-</ol>
-
-<p>If everything works as expected, your application should begin downloading the expansion
-files as soon as the main activity starts.</p>
-
-
-
-
-<h2 id="Updating">Updating Your Application</h2>
-
-<p>One of the great benefits to using expansion files on Google Play is the ability to
-update your application without re-downloading all of the original assets. Because Google Play
-allows you to provide two expansion files with each APK, you can use the second file as a "patch"
-that provides updates and new assets. Doing so avoids the
-need to re-download the main expansion file which could be large and expensive for users.</p>
-
-<p>The patch expansion file is technically the same as the main expansion file and neither
-the Android system nor Google Play perform actual patching between your main and patch expansion
-files. Your application code must perform any necessary patches itself.</p>
-
-<p>If you use ZIP files as your expansion files, the <a href="#ZipLib">APK Expansion Zip
-Library</a> that's included with the Apk Expansion package includes the ability to merge
-your
-patch file with the main expansion file.</p>
-
-<p class="note"><strong>Note:</strong> Even if you only need to make changes to the patch
-expansion file, you must still update the APK in order for Google Play to perform an update.
-If you don't require code changes in the application, you should simply update the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> in the
-manifest.</p>
-
-<p>As long as you don't change the main expansion file that's associated with the APK
-in the Developer Console, users who previously installed your application will not
-download the main expansion file. Existing users receive only the updated APK and the new patch
-expansion file (retaining the previous main expansion file).</p>
-
-<p>Here are a few issues to keep in mind regarding updates to expansion files:</p>
-
-<ul>
- <li>There can be only two expansion files for your application at a time. One main expansion
-file and one patch expansion file. During an update to a file, Google Play deletes the
-previous version (and so must your application when performing manual updates).</li>
- <li>When adding a patch expansion file, the Android system does not actually patch your
-application or main expansion file. You must design your application to support the patch data.
-However, the Apk Expansion package includes a library for using ZIP files
-as expansion files, which merges the data from the patch file into the main expansion file so
-you can easily read all the expansion file data.</li>
-</ul>
-
-
-
-<!-- Tools are not ready.
-
-<h3>Using OBB tool and APIs</h3>
-
-<pre>
-$ mkobb.sh -d /data/myfiles -k my_secret_key -o /data/data.obb
-$ obbtool a -n com.example.myapp -v 1 -s seed_from_mkobb /data/data.obb
-</pre>
-
-<pre>
-storage = (StorageManager) getSystemService( STORAGE_SERVICE );
-storage.mountObb( obbFilepath, "my_secret_key", myListener );
-obbContentPath = storage.getMountedObbPath( obbFilepath );
-</pre>
--->
diff --git a/docs/html/guide/google/play/filters.jd b/docs/html/guide/google/play/filters.jd
deleted file mode 100644
index 3db9cb6..0000000
--- a/docs/html/guide/google/play/filters.jd
+++ /dev/null
@@ -1,454 +0,0 @@
-page.title=Filters on Google Play
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-<ul>
-<li>Google Play applies filters that control which Android-powered devices can access your
-application when the user is visiting the store.</li>
-<li>Filtering is determined by comparing device configurations that you declare in you app's
-manifest file to the configurations defined by the device, as well as other factors.</li> </ul>
-
-<h2>In this document</h2>
-
-<ol>
- <li><a href="#how-filters-work">How Filters Work on Google Play</a></li>
- <li><a href="#manifest-filters">Filtering based on Manifest Elements</a>
- <ol>
- <li><a href="#advanced-filters">Advanced manifest filters</a></li>
- </ol>
- </li>
- <li><a href="#other-filters">Other Filters</a></li>
- <li><a href="#MultiApks">Publishing Multiple APKs with Different Filters</a></li>
-</ol>
-
-<h2>See also</h2>
- <ol>
-<li><a
-href="{@docRoot}guide/practices/compatibility.html">Android Compatibility</a></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
-</ol>
-
-<div id="qv-extra">
- <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
- <div id="qv-sub-rule">
- <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
- <h2 style="color:#669999;padding-top:1em;">Interested in publishing your app on Google Play?</h2>
- <p><a id="publish-link"
-href="http://play.google.com/apps/publish">Go to Google Play</a> to create a publisher
-account and upload your app.</p></div>
-</div>
-
-</div>
-</div>
-
-
-<p>When a user searches or browses on Google Play on an Android device, the results are filtered
-based on which applications are compatible with that device. For example, if an application
-requires a camera (as specified in the application manifest file), then Google Play will not show
-the app on any device that does not have a camera.</p>
-
-<p>Declarations in the manifest file that are compared to the device's configuration is not the
-only part of how applications are filtered. Filtering might also occur due to the user's country and
-carrier, the presence or absence of a SIM card, and other factors. </p>
-
-<p>Changes to the Google Play filters are independent of changes to the Android platform itself.
-This document is updated periodically to reflect any changes that affect the way Google Play
-filters applications.</p>
-
-
-<h2 id="how-filters-work">How Filters Work on Google Play</h2>
-
-<p>Google Play uses the filter restrictions described below to determine
-whether to show your application to a user who is browsing or searching for
-applications from the Google Play app. When determining whether to display your app,
-Google Play checks the device's hardware and software configuration, as well as it's
-carrier, location, and other characteristics. It then compares those against the
-restrictions and dependencies expressed by the application's
-manifest file and publishing details. If the application is
-compatible with the device according to the filter rules, Google Play displays the
-application to the user. Otherwise, Google Play hides your application from search
-results and category browsing, even if a user specifically requests
-the app by clicking a deep link that points directly to the app's ID within Google Play..</p>
-
-<p class="note"><strong>Note:</strong> When users browse the <a
-href="http://play.google.com/apps">Google Play web site</a>, they can see all published
-applications. The Google Play web site compares the application requirements to each of the
-user's registered devices for compatibility, though, and only allows them to install the application
-if it's compatible with their device.</p>
-
-<p>You can use any combination of the available filters for your app. For example, you can set a
-<code>minSdkVersion</code> requirement of <code>"4"</code> and set <code>smallScreens="false"</code>
-in the app, then when uploading the app to Google Play you could target European countries (carriers)
-only. Google Play's filters will thus prevent the application from being available on any device
-that does not match all three of these requirements. </p>
-
-<p>All filtering restrictions are associated with an application's version and can
-change between versions. For example, if a user has installed your application and you publish an
-update that makes the app invisible to the user, the user will not see that an update is
-available.</p>
-
-
-<h2 id="manifest-filters">Filtering based on Manifest Elements</h2>
-
-<p>Most filters are triggered by elements within an application's
-manifest file, <a
-href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
-(although not everything in the manifest file can trigger filtering).
-Table 1 lists the manifest elements that you should use to trigger
-filtering, and explains how the filtering for each element works.</p>
-
-<p id="table1" class="table-caption"><strong>Table 1.</strong> Manifest elements that
-trigger filtering on Google Play.</p>
-<table>
- <tr>
- <th>Manifest Element</th>
- <th>Filter Name</th>
- <th>How It Works</th>
- </tr>
- <tr>
- <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
- <!-- ##api level 4## --></td>
- <td valign="top">Screen Size</td>
- <td valign="top">
-
-<p>An application indicates the screen sizes that it is capable of supporting by
-setting attributes of the <code>&lt;supports-screens&gt;</code> element. When
-the application is published, Google Play uses those attributes to determine whether
-to show the application to users, based on the screen sizes of their
-devices. </p>
-
-<p>As a general rule, Google Play assumes that the platform on the device can adapt
-smaller layouts to larger screens, but cannot adapt larger layouts to smaller
-screens. Thus, if an application declares support for "normal" screen size only,
-Google Play makes the application available to both normal- and large-screen devices,
-but filters the application so that it is not available to small-screen
-devices.</p>
-
-<p>If an application does not declare attributes for
-<code>&lt;supports-screens&gt;</code>, Google Play uses the default values for those
-attributes, which vary by API Level. Specifically: </p>
-
-<ul>
-<li><p>For applications that set either the <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
-minSdkVersion</a></code> or <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
-targetSdkVersion</a></code> to 3 or lower, the <code>&lt;supports-screens&gt;</code> element itself
-is undefined and no attributes are available. In this case, Google Play assumes that
-the application is designed for normal-size screens and shows the application to
-devices that have normal or larger screens. </p>
-
-<li>When the either the <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
-minSdkVersion</a></code> or <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
-targetSdkVersion</a></code> is set to 4 or higher, the default for all attributes is
-<code>"true"</code>. In this way, the application is considered to support all screen sizes by
-default.</li>
-</ul>
-
- <p><strong>Example 1</strong><br />
- The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
- and does not include a <code>&lt;supports-screens&gt;</code> element.
- <strong>Result</strong>: Google Play will not show the app to a user of a
- small-screen device, but will show it to users of normal and large-screen
- devices, unless other filters apply. </p>
- <p><strong>Example 2<br />
- </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"
- android:targetSdkVersion="4"&gt;</code> and does not include a
- <code>&lt;supports-screens&gt;</code> element.
- <strong>Result</strong>: Google Play will show the app to users on all
- devices, unless other filters apply. </p>
- <p><strong>Example 3<br />
- </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>
- and does not include a <code>&lt;supports-screens&gt;</code> element.
- <strong>Result</strong>: Google Play will show the app to all users,
- unless other filters apply. </p>
- <p>For more information on how to declare support for screen sizes in your
- application, see <code><a
- href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
- and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
- Screens</a>.</p>
-</td>
- </tr>
-
- <tr>
- <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
- <!-- ##api level 3## --></td>
- <td valign="top">Device
- Configuration: <br />
- keyboard, navigation, touch screen</td>
- <td valign="top"><p>An application can
- request certain hardware features, and Google Play will show the app only on devices that have the required hardware.</p>
- <p><strong>Example 1<br />
- </strong>The manifest includes <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>, and a user is searching for apps on a device that does not have a five-way navigational control. <strong>Result</strong>: Google Play will not show the app to the user. </p>
- <p><strong>Example 2<br />
- </strong>The manifest does not include a <code>&lt;uses-configuration&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
-<p>For more details, see <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>.</p></td>
- </tr>
-
- <tr>
- <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
-</code>
- <!-- ##api level 4## --></td>
- <td valign="top">Device Features<br />
- (<code>name</code>)</td>
- <td valign="top"><p>An application can require certain device features to be
-present on the device. This functionality was introduced in Android 2.0 (API
-Level 5).</p>
- <p><strong>Example 1<br />
- </strong>The manifest includes <code>&lt;uses-feature
-android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>, and a user
-is searching for apps on a device that does not have a light sensor.
-<strong>Result</strong>: Google Play will not show the app to the user. </p>
- <p><strong>Example 2<br />
- </strong>The manifest does not include a <code>&lt;uses-feature&gt;</code>
-element. <strong>Result</strong>: Google Play will show the app to all users,
-unless other filters apply.</p>
- <p>For complete information, see <code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
-</code>.</p>
- <p><em>Filtering based on implied features:</em> In some cases, Google
-Play interprets permissions requested through
-<code>&lt;uses-permission&gt;</code> elements as feature requirements equivalent
-to those declared in <code>&lt;uses-feature&gt;</code> elements. See <a
-href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>,
-below.</p>
-</td>
- </tr>
-
- <tr>
- <td valign="top">OpenGL-ES
- Version<br />
-(<code>openGlEsVersion</code>)</td>
- <td valign="top"><p>An application can require that the device support a specific
- OpenGL-ES version using the <code>&lt;uses-feature
- android:openGlEsVersion=&quot;int&quot;&gt;</code> attribute.</p>
- <p><strong>Example 1<br />
- </strong>An app
- requests multiple OpenGL-ES versions by specifying <code>openGlEsVersion</code> multiple times in the
- manifest. <strong>Result</strong>: Google Play assumes that the app requires the highest of the indicated versions.</p>
-<p><strong>Example 2<br />
-</strong>An app
- requests OpenGL-ES version 1.1, and a user is searching for apps on a device that supports OpenGL-ES version 2.0. <strong>Result</strong>: Google Play will show the app to the user, unless other filters apply. If a
- device reports that it supports OpenGL-ES version <em>X</em>, Google Play assumes that it
- also supports any version earlier than <em>X</em>.
-</p>
-<p><strong>Example 3<br />
-</strong>A user is searching for apps on a device that does not
- report an OpenGL-ES version (for example, a device running Android 1.5 or earlier). <strong>Result</strong>: Google Play assumes that the device
- supports only OpenGL-ES 1.0. Google Play will only show the user apps that do not specify <code>openGlEsVersion</code>, or apps that do not specify an OpenGL-ES version higher than 1.0. </p>
- <p><strong>Example 4<br />
- </strong>The manifest does not specify <code>openGlEsVersion</code>. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply. </p>
-<p>For more details, see <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p></td>
- </tr>
-
- <tr>
- <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
- <td valign="top">Software Libraries</td>
- <td valign="top"><p>An application can require specific
- shared libraries to be present on the device. </p>
- <p><strong>Example 1<br />
- </strong>An app requires the <code>com.google.android.maps</code> library, and a user is searching for apps on a device that does not have the <code>com.google.android.maps</code> library. <strong>Result</strong>: Google Play will not show the app to the user. </p>
- <p><strong>Example 2</strong><br />
- The manifest does not include a <code>&lt;uses-library&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
-<p>For more details, see <a
-href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>.</p></td>
- </tr>
- <tr id="uses-permission-filtering">
- <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
- <td valign="top">&nbsp;</td>
- <td valign="top">Strictly, Google Play does not filter based on
-<code>&lt;uses-permission&gt;</code> elements. However, it does read the
-elements to determine whether the application has hardware feature requirements
-that may not have been properly declared in <code>&lt;uses-feature&gt;</code>
-elements. For example, if an application requests the <code>CAMERA</code>
-permission but does not declare a <code>&lt;uses-feature&gt;</code> element for
-<code>android.hardware.camera</code>, Google Play considers that the
-application requires a camera and should not be shown to users whose devices do
-not offer a camera.</p>
- <p>In general, if an application requests hardware-related permissions,
-Google Play assumes that the application requires the underlying hardware
-features, even though there might be no corresponding to
-<code>&lt;uses-feature&gt;</code> declarations. Google Play then sets up
-filtering based on the features implied by the <code>&lt;uses-feature&gt;</code>
-declarations.</p>
- <p>For a list of permissions that imply hardware features, see
-the documentation for the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>
-element.</p>
-</td>
- </tr>
-
- <tr>
- <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
- <td valign="top">Minimum Framework Version (<code>minSdkVersion</code>)</td>
- <td valign="top"><p>An application can require a minimum API level. </p>
- <p><strong>Example 1</strong><br />
- The manifest includes <code>&lt;uses-sdk
- android:minSdkVersion=&quot;3&quot;&gt;</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play will not show the app to the user. </p>
- <p><strong>Example 2</strong><br />
- The manifest does not include <code>minSdkVersion</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play assumes that <code>minSdkVersion</code> is &quot;1&quot; and that the app is compatible with all versions of Android. Google Play shows the app to the user and allows the user to download the app. The app crashes at runtime. </p>
- <p>Because you want to avoid this second scenario, we recommend that you always declare a <code>minSdkVersion</code>. For details, see <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>.</p></td>
- </tr>
- <tr>
- <td valign="top">Maximum Framework Version (<code>maxSdkVersion</code>)</td>
- <td valign="top"><p><em>Deprecated.</em> Android
- 2.1 and later do not check or enforce the <code>maxSdkVersion</code> attribute, and
- the SDK will not compile if <code>maxSdkVersion</code> is set in an app's manifest. For devices already
- compiled with <code>maxSdkVersion</code>, Google Play will respect it and use it for
- filtering.</p>
-<p> Declaring <code>maxSdkVersion</code> is <em>not</em> recommended. For details, see <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>.</p></td>
- </tr>
-</table>
-
-
-
-<h3 id="advanced-filters">Advanced manifest filters</h3>
-
-<p>In addition to the manifest elements in <a href="#table1">table 1</a>, Google Play can also
-filter applications based on the advanced manifest elements in table 2.</p>
-
-<p>These manifest elements and the filtering they trigger are for exceptional use-cases
-only. These are designed for certain types of high-performance games and similar applications that
-require strict controls on application distribution. <strong>Most applications should never use
-these filters</strong>.</p>
-
-<p id="table2" class="table-caption"><strong>Table 2.</strong> Advanced manifest elements for
-Google Play filtering.</p>
-<table>
- <tr><th>Manifest Element</th><th>Summary</th></tr>
- <tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a></nobr></td>
- <td>
- <p>Google Play filters the application if the device screen size and density does not match
-any of the screen configurations (declared by a {@code &lt;screen&gt;} element) in the {@code
-&lt;compatible-screens&gt;} element.</p>
- <p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use
-this manifest element</strong>. Using this element can dramatically
-reduce the potential user base for your application, by excluding all combinations of screen size
-and density that you have not listed. You should instead use the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> manifest element (described above in <a href="#table1">table
-1</a>) to enable screen compatibility mode for screen configurations you have not accounted for
-with alternative resources.</p>
- </td>
- </tr>
- <tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a></nobr></td>
- <td>
- <p>Google Play filters the application unless one or more of the GL texture compression
-formats supported by the application are also supported by the device. </p>
- </td>
- </tr>
-</table>
-
-
-
-<h2 id="other-filters">Other Filters</h2>
-
-<p>Google Play uses other application characteristics to determine whether to show or hide an application for a particular user on a given device, as described in the table below. </p>
-
-<p id="table3" class="table-caption"><strong>Table 3.</strong> Application and publishing
-characteristics that affect filtering on Google Play.</p>
-<table> <tr>
- <th>Filter Name</th> <th>How It Works</th> </tr>
-
- <tr>
- <td valign="top">Publishing Status</td> <td valign="top"><p>Only published applications will appear in
- searches and browsing within Google Play.</p> <p>Even if an app is unpublished, it can
- be installed if users can see it in their Downloads area among their purchased,
- installed, or recently uninstalled apps.</p> <p>If an application has been
- suspended, users will not be able to reinstall or update it, even if it appears in their Downloads.</p> </td></tr>
- <tr>
- <td valign="top">Priced
- Status</td> <td valign="top"><p>Not all users can see paid apps. To show paid apps, a device
-must have a SIM card and be running Android 1.1 or later, and it must be in a
-country (as determined by SIM carrier) in which paid apps are available.</p></td>
-</tr> <tr>
- <td valign="top">Country / Carrier Targeting</td> <td valign="top"> <p>When you upload your app to
- Google Play, you can select specific countries to target. The app will only
- be visible to the countries (carriers) that you select, as follows:</p>
- <ul><li><p>A device's country is determined based on the carrier, if a carrier is
- available. If no carrier can be determined, Google Play tries to
- determine the country based on IP.</p></li> <li><p>Carrier is determined based on
- the device's SIM (for GSM devices), not the current roaming carrier.</p></li></ul>
-</td> </tr> <tr>
- <td valign="top">Native Platform</td> <td valign="top"><p>An application that includes native
- libraries that target a specific platform (ARM EABI v7 or x86, for example) are
- visible only on devices that support that platform. For details about the NDK and using
- native libraries, see <a href="{@docRoot}tools/sdk/ndk/index.html#overview">What is the
- Android NDK?</a></p> </tr> <tr>
- <td valign="top">Copy-Protected Applications</td> <td valign="top"><p>To
- copy protect an application, set copy protection to "On" when you configure publishing
-options for your application. Google Play will not show copy-protected applications on
-developer devices or unreleased devices.</p></td> </tr> </table>
-
-
-
-<h2 id="MultiApks">Publishing Multiple APKs with Different Filters</h2>
-
-<p>Some specific Google Play filters allow you to publish multiple APKs for the same
-application in order to provide a different APK to different device configurations. For example, if
-you're creating a video game that uses high-fidelity graphic assets, you might want to create
-two APKs that each support different texture compression formats. This way, you can reduce the
-size of the APK file by including only the textures that are required for each device
-configuration. Depending on each device's support for your texture compression formats, Google
-Play will deliver it the APK that you've declared to support that device.</p>
-
-<p>Currently, Google Play allows you to publish multiple APKs for the same application only
-when each APK provides different filters based on the following configurations:</p>
-<ul>
- <li>OpenGL texture compression formats
- <p>By using the <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a> element.</p>
- </li>
- <li>Screen size (and, optionally, screen density)
- <p>By using the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> or <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> element.</p>
- </li>
- <li>API level
- <p>By using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-&lt;uses-sdk&gt;}</a> element.</p>
- </li>
-</ul>
-
-<p>All other filters still work the same as usual, but these three are the only filters that can
-distinguish one APK from another within the same application listing on Google Play. For example,
-you <em>cannot</em> publish multiple APKs for the same application if the APKs differ only based on
-whether the device has a camera.</p>
-
-<p class="caution"><strong>Caution:</strong> Publishing multiple APKs for the same application is
-considered an advanced feature and <strong>most application should publish only one
-APK that supports a wide range of device configurations</strong>. Publishing multiple APKs
-requires that you follow specific rules within your filters and that you pay extra attention to the
-version codes for each APK to ensure proper update paths for each configuration.</p>
-
-<p>If you need more information about how to publish multiple APKs on Google Play, read <a
-href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
diff --git a/docs/html/guide/google/play/licensing/adding-licensing.jd b/docs/html/guide/google/play/licensing/adding-licensing.jd
deleted file mode 100644
index 4a45de3..0000000
--- a/docs/html/guide/google/play/licensing/adding-licensing.jd
+++ /dev/null
@@ -1,1071 +0,0 @@
-page.title=Adding Licensing to Your App
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>In this document</h2>
- <ol>
- <li><a href="#manifest-permission">Adding the Licensing Permission</a></li>
- <li><a href="#impl-Policy">Implementing a Policy</a>
- <ol>
- <li><a href="#custom-policies">Guidelines for custom policies</a></li>
- <li><a href="#ServerManagedPolicy">ServerManagedPolicy</a></li>
- <li><a href="#StrictPolicy">StrictPolicy</a></li>
- </ol>
- </li>
- <li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>
- <ol>
- <li><a href="#AESObfuscator">AESObfuscator</a></li>
- </ol>
- </li>
- <li><a href="#impl-lc">Checking the License from an Activity</a>
- <ol>
- <li><a href="#lc-overview">Overview of license check and response</a></li>
- <li><a href="#imports">Add imports</a></li>
- <li><a href="#lc-impl">Implement LicenseCheckerCallback as a private inner class</a></li>
- <li><a href="#thread-handler">Create a Handler for posting from LicenseCheckerCallback
-to the UI thread</a></li>
- <li><a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a></li>
- <li><a href="#check-access">Call checkAccess() to initiate the license check</a></li>
- <li><a href="#account-key">Embed your public key for licensing</a></li>
- <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method
-to close IPC connections</a></li>
- </ol>
- </li>
- <li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a></li>
- <li><a href="#app-obfuscation">Obfuscating Your Code</a></li>
- <li><a href="#app-publishing">Publishing a Licensed Application</a>
- <ol>
- <li><a href="#">Removing Copy Protection</a></li>
- </ol>
- </li>
- <li><a href="#support">Where to Get Support</a></li>
-</ol>
-
-</div>
-</div>
-
-
-
-<p>After you've set up a publisher account and development environment (see <a
-href="setting-up.html">Setting Up for Licensing</a>), you are ready to add license verification to
-your app with the License Verification Library (LVL).</p>
-
-<p>Adding license verification with the LVL involves these tasks:</p>
-
-<ol>
-<li><a href="#manifest-permission">Adding the licensing permission</a> your application's manifest.</li>
-<li><a href="#impl-Policy">Implementing a Policy</a> &mdash; you can choose one of the full implementations provided in the LVL or create your own.</li>
-<li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>, if your {@code Policy} will cache any
-license response data. </li>
-<li><a href="#impl-lc">Adding code to check the license</a> in your application's main
-Activity.</li>
-<li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a> (optional and not recommended for
-most applications).</li>
-</ol>
-
-<p>The sections below describe these tasks. When you are done with the
-integration, you should be able to compile your application successfully and you
-can begin testing, as described in <a
-href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">Setting Up the Test
-Environment</a>.</p>
-
-<p>For an overview of the full set of source files included in the LVL, see <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#lvl-summary">Summary of LVL Classes
-and Interfaces</a>.</p>
-
-
-<h2 id="manifest-permission">Adding the Licensing Permission</h2>
-
-<p>To use the Google Play application for sending a license check to the
-server, your application must request the proper permission,
-<code>com.android.vending.CHECK_LICENSE</code>. If your application does
-not declare the licensing permission but attempts to initiate a license check,
-the LVL throws a security exception.</p>
-
-<p>To request the licensing permission in your application, declare a <a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><code>&lt;uses-permission&gt;</code></a>
-element as a child of <code>&lt;manifest&gt;</code>, as follows: </p>
-
-<p style="margin-left:2em;"><code>&lt;uses-permission
-android:name="com.android.vending.CHECK_LICENSE"&gt;</code></p>
-
-<p>For example, here's how the LVL sample application declares the permission:
-</p>
-
-<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" ..."&gt;
- &lt;!-- Devices &gt;= 3 have version of Google Play that supports licensing. --&gt;
- &lt;uses-sdk android:minSdkVersion="3" /&gt;
- &lt;!-- Required permission to check licensing. --&gt;
- &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" /&gt;
- ...
-&lt;/manifest&gt;
-</pre>
-
-<p class="note"><strong>Note:</strong> Currently, you cannot declare the
-<code>CHECK_LICENSE</code> permission in the LVL library project's manifest,
-because the SDK Tools will not merge it into the manifests of dependent
-applications. Instead, you must declare the permission in each dependent
-application's manifest. </p>
-
-
-<h2 id="impl-Policy">Implementing a Policy</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>ServerManagedPolicy</h2>
-
-<p>The LVL includes a complete {@code Policy} implementation called ServerManagedPolicy
-that makes use of license-management settings provided by the Google Play
-server. </p>
-
-<p style="margin-top:.5em;">Use of ServerManagedPolicy as the basis for your
-Policy is strongly recommended. For more information, see <a
-href="#ServerManagedPolicy">ServerManagedPolicy</a> section, below.</p>
-
-</div>
-</div>
-
-<p>Google Play licensing service does not itself determine whether a
-given user with a given license should be granted access to your application.
-Rather, that responsibility is left to a {@code Policy} implementation that you provide
-in your application.</p>
-
-<p>Policy is an interface declared by the LVL that is designed to hold your
-application's logic for allowing or disallowing user access, based on the result
-of a license check. To use the LVL, your application <em>must</em> provide an
-implementation of {@code Policy}. </p>
-
-<p>The {@code Policy} interface declares two methods, <code>allowAccess()</code> and
-<code>processServerResponse()</code>, which are called by a {@code LicenseChecker}
-instance when processing a response from the license server. It also declares an
-enum called <code>LicenseResponse</code>, which specifies the license response
-value passed in calls to <code>processServerResponse()</code>. </p>
-
-<ul>
-<li><code>processServerResponse()</code> lets you preprocess the raw response
-data received from the licensing server, prior to determining whether to grant
-access.
-
-<p>A typical implementation would extract some or all fields from the license
-response and store the data locally to a persistent store, such as through
-{@link android.content.SharedPreferences} storage, to ensure that the data is
-accessible across application invocations and device power cycles. For example,
-a {@code Policy} would maintain the timestamp of the last successful license check, the
-retry count, the license validity period, and similar information in a
-persistent store, rather than resetting the values each time the application is
-launched.</p>
-
-<p>When storing response data locally, the {@code Policy} must ensure that the data is
-obfuscated (see <a href="#impl-Obfuscator">Implementing an Obfuscator</a>,
-below).</p></li>
-
-<li><code>allowAccess()</code> determines whether to grant the user access to
-your application, based on any available license response data (from the
-licensing server or from cache) or other application-specific information. For
-example, your implementation of <code>allowAccess()</code> could take into
-account additional criteria, such as usage or other data retrieved from a
-backend server. In all cases, an implementation of <code>allowAccess()</code>
-should only return <code>true</code> if the user is licensed to use the
-application, as determined by the licensing server, or if there is a transient
-network or system problem that prevents the license check from completing. In
-such cases, your implementation can maintain a count of retry responses and
-provisionally allow access until the next license check is complete.</li>
-
-</ul>
-
-<p>To simplify the process of adding licensing to your application and to
-provide an illustration of how a {@code Policy} should be designed, the LVL includes
-two full {@code Policy} implementations that you can use without modification or
-adapt to your needs:</p>
-
-<ul>
-<li><a href="#ServerManagedPolicy">ServerManagedPolicy</a>, a flexible {@code Policy}
-that uses server-provided settings and cached responses to manage access across
-varied network conditions, and</li>
-<li><a href="#StrictPolicy">StrictPolicy</a>, which does not cache any response
-data and allows access <em>only</em> if the server returns a licensed
-response.</li>
-</ul>
-
-<p>For most applications, the use of ServerManagedPolicy is highly
-recommended. ServerManagedPolicy is the LVL default and is integrated with
-the LVL sample application.</p>
-
-
-<h3 id="custom-policies">Guidelines for custom policies</h3>
-
-<p>In your licensing implementation, you can use one of the complete policies
-provided in the LVL (ServerManagedPolicy or StrictPolicy) or you can create a
-custom policy. For any type of custom policy, there are several important design
-points to understand and account for in your implementation.</p>
-
-<p>The licensing server applies general request limits to guard against overuse
-of resources that could result in denial of service. When an application exceeds
-the request limit, the licensing server returns a 503 response, which gets
-passed through to your application as a general server error. This means that no
-license response will be available to the user until the limit is reset, which
-can affect the user for an indefinite period.</p>
-
-<p>If you are designing a custom policy, we recommend that the {@code Policy}:
-<ol>
-<!-- <li>Limits the number of points at which your app calls for a license check
-to the minimum. </li> -->
-<li>Caches (and properly obfuscates) the most recent successful license response
-in local persistent storage.</li>
-<li>Returns the cached response for all license checks, for as long as the
-cached response is valid, rather than making a request to the licensing server.
-Setting the response validity according to the server-provided <code>VT</code>
-extra is highly recommended. See <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
-for more information.</li>
-<li>Uses an exponential backoff period, if retrying any requests the result in
-errors. Note that the Google Play client automatically retries failed
-requests, so in most cases there is no need for your {@code Policy} to retry them.</li>
-<li>Provides for a "grace period" that allows the user to access your
-application for a limited time or number of uses, while a license check is being
-retried. The grace period benefits the user by allowing access until the next
-license check can be completed successfully and it benefits you by placing a
-hard limit on access to your application when there is no valid license response
-available.</li>
-</ol>
-
-<p>Designing your {@code Policy} according to the guidelines listed above is critical,
-because it ensures the best possible experience for users while giving you
-effective control over your application even in error conditions. </p>
-
-<p>Note that any {@code Policy} can use settings provided by the licensing server to
-help manage validity and caching, retry grace period, and more. Extracting the
-server-provided settings is straightforward and making use of them is highly
-recommended. See the ServerManagedPolicy implementation for an example of how to
-extract and use the extras. For a list of server settings and information about
-how to use them, see <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
-Extras</a>.</p>
-
-<h3 id="ServerManagedPolicy">ServerManagedPolicy</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Server Response Extras</h2>
-
-<p>For certain types of licensing responses, the licensing server appends extra
-settings to the responses, to help the application manage licensing effectively.
-</p>
-
-<p style="margin-top:.5em;">See <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
-for
-a list of settings and <code>ServerManagedPolicy.java</code> for information
-about how a {@code Policy} can use the extras.</p>
-
-</div>
-</div>
-
-<p>The LVL includes a full and recommended implementation of the {@code Policy}
-interface called ServerManagedPolicy. The implementation is integrated with the
-LVL classes and serves as the default {@code Policy} in the library. </p>
-
-<p>ServerManagedPolicy provides all of the handling for license and retry
-responses. It caches all of the response data locally in a
-{@link android.content.SharedPreferences} file, obfuscating it with the
-application's {@code Obfuscator} implementation. This ensures that the license response
-data is secure and persists across device power cycles. ServerManagedPolicy
-provides concrete implementations of the interface methods
-<code>processServerResponse()</code> and <code>allowAccess()</code> and also
-includes a set of supporting methods and types for managing license
-responses.</p>
-
-<p>Importantly, a key feature of ServerMangedPolicy is its use of
-server-provided settings as the basis for managing licensing across an
-application's refund period and through varying network and error conditions.
-When an application contacts the Google Play server for a license check, the
-server appends several settings as key-value pairs in the extras field of certain
-license response types. For example, the server provides recommended values for the
-application's license validity period, retry grace period, and maximum allowable
-retry count, among others. ServerManagedPolicy extracts the values from the
-license response in its <code>processServerResponse()</code> method and checks
-them in its <code>allowAccess()</code> method. For a list of the server-provided
-settings used by ServerManagedPolicy, see <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
-Extras</a>.</p>
-
-<p>For convenience, best performance, and the benefit of using license settings
-from the Google Play server, <strong>using ServerManagedPolicy as your
-licensing {@code Policy} is strongly recommended</strong>. </p>
-
-<p>If you are concerned about the security of license response data that is
-stored locally in {@link android.content.SharedPreferences}, you can use a stronger obfuscation
-algorithm or design a stricter {@code Policy} that does not store license data. The LVL
-includes an example of such a {@code Policy} &mdash; see <a
-href="#StrictPolicy">StrictPolicy</a> for more information.</p>
-
-<p>To use ServerManagedPolicy, simply import it to your Activity, create an
-instance, and pass a reference to the instance when constructing your
-{@code LicenseChecker}. See <a href="#lc-lcc">Instantiate LicenseChecker and
-LicenseCheckerCallback</a> for more information. </p>
-
-<h3 id="StrictPolicy">StrictPolicy</h3>
-
-<p>The LVL includes an alternative full implementation of the {@code Policy} interface
-called StrictPolicy. The StrictPolicy implementation provides a more restrictive
-Policy than ServerManagedPolicy, in that it does not allow the user to access
-the application unless a license response is received from the server at the
-time of access that indicates that the user is licensed.</p>
-
-<p>The principal feature of StrictPolicy is that it does not store <em>any</em>
-license response data locally, in a persistent store. Because no data is stored,
-retry requests are not tracked and cached responses can not be used to fulfill
-license checks. The {@code Policy} allows access only if:</p>
-
-<ul>
-<li>The license response is received from the licensing server, and </li>
-<li>The license response indicates that the user is licensed to access the
-application. </li>
-</ul>
-
-<p>Using StrictPolicy is appropriate if your primary concern is to ensure that,
-in all possible cases, no user will be allowed to access the application unless
-the user is confirmed to be licensed at the time of use. Additionally, the
-Policy offers slightly more security than ServerManagedPolicy &mdash; since
-there is no data cached locally, there is no way a malicious user could tamper
-with the cached data and obtain access to the application.</p>
-
-<p>At the same time, this {@code Policy} presents a challenge for normal users, since it
-means that they won't be able to access the application when there is no network
-(cell or Wi-Fi) connection available. Another side-effect is that your
-application will send more license check requests to the server, since using a
-cached response is not possible.</p>
-
-<p>Overall, this policy represents a tradeoff of some degree of user convenience
-for absolute security and control over access. Consider the tradeoff carefully
-before using this {@code Policy}.</p>
-
-<p>To use StrictPolicy, simply import it to your Activity, create an instance,
-and pass a reference to it when constructing your {@code LicenseChecker}. See
-<a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a>
-for more information. </p>
-
-<h2 id="impl-Obfuscator">Implementing an Obfuscator</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>AESObfuscator</h2>
-
-<p>The LVL includes a full {@code Obfuscator} implementation in the
-<code>AESObfuscator.java</code> file. The {@code Obfuscator} uses AES encryption to
-obfuscate/unobfuscate data. If you are using a {@code Policy} (such as
-ServerManagedPolicy) that caches license response data, using AESObfuscator as
-basis for your {@code Obfuscator} implementation is highly recommended. </p>
-
-</div>
-</div>
-
-<p>A typical {@code Policy} implementation needs to save the license response data for
-an application to a persistent store, so that it is accessible across
-application invocations and device power cycles. For example, a {@code Policy} would
-maintain the timestamp of the last successful license check, the retry count,
-the license validity period, and similar information in a persistent store,
-rather than resetting the values each time the application is launched. The
-default {@code Policy} included in the LVL, ServerManagedPolicy, stores license response
-data in a {@link android.content.SharedPreferences} instance, to ensure that the
-data is persistent. </p>
-
-<p>Because the {@code Policy} will use stored license response data to determine whether
-to allow or disallow access to the application, it <em>must</em> ensure that any
-stored data is secure and cannot be reused or manipulated by a root user on a
-device. Specifically, the {@code Policy} must always obfuscate the data before storing
-it, using a key that is unique for the application and device. Obfuscating using
-a key that is both application-specific and device-specific is critical, because
-it prevents the obfuscated data from being shared among applications and
-devices.</p>
-
-<p>The LVL assists the application with storing its license response data in a
-secure, persistent manner. First, it provides an {@code Obfuscator}
-interface that lets your application supply the obfuscation algorithm of its
-choice for stored data. Building on that, the LVL provides the helper class
-PreferenceObfuscator, which handles most of the work of calling the
-application's {@code Obfuscator} class and reading and writing the obfuscated data in a
-{@link android.content.SharedPreferences} instance. </p>
-
-<p>The LVL provides a full {@code Obfuscator} implementation called
-AESObfuscator that uses AES encryption to obfuscate data. You can
-use AESObfuscator in your application without modification or you
-can adapt it to your needs. For more information, see the next section.</p>
-
-
-<h3 id="AESObfuscator">AESObfuscator</h3>
-
-<p>The LVL includes a full and recommended implementation of the {@code Obfuscator}
-interface called AESObfuscator. The implementation is integrated with the
-LVL sample application and serves as the default {@code Obfuscator} in the library. </p>
-
-<p>AESObfuscator provides secure obfuscation of data by using AES to
-encrypt and decrypt the data as it is written to or read from storage.
-The {@code Obfuscator} seeds the encryption using three data fields provided
-by the application: </p>
-
-<ol>
-<li>A salt &mdash; an array of random bytes to use for each (un)obfuscation. </li>
-<li>An application identifier string, typically the package name of the application.</li>
-<li>A device identifier string, derived from as many device-specific sources
-as possible, so as to make it as unique.</li>
-</ol>
-
-<p>To use AESObfuscator, first import it to your Activity. Declare a private
-static final array to hold the salt bytes and initialize it to 20 randomly
-generated bytes.</p>
-
-<pre> ...
- // Generate 20 random bytes, and put them here.
- private static final byte[] SALT = new byte[] {
- -46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95,
- -45, 77, -117, -36, -113, -11, 32, -64, 89
- };
- ...
-</pre>
-
-<p>Next, declare a variable to hold a device identifier and generate a value for
-it in any way needed. For example, the sample application included in the LVL
-queries the system settings for the
-<code>android.Settings.Secure.ANDROID_ID</code>, which is unique to each device.
-</p>
-
-<p>Note that, depending on the APIs you use, your application might need to
-request additional permissions in order to acquire device-specific information.
-For example, to query the {@link android.telephony.TelephonyManager} to obtain
-the device IMEI or related data, the application will also need to request the
-<code>android.permission.READ_PHONE_STATE</code> permission in its manifest.</p>
-
-<p>Before requesting new permissions for the <em>sole purpose</em> of acquiring
-device-specific information for use in your {@code Obfuscator}, consider
-how doing so might affect your application or its filtering on Google Play
-(since some permissions can cause the SDK build tools to add
-the associated <code>&lt;uses-feature&gt;</code>).</p>
-
-<p>Finally, construct an instance of AESObfuscator, passing the salt,
-application identifier, and device identifier. You can construct the instance
-directly, while constructing your {@code Policy} and {@code LicenseChecker}. For example:</p>
-
-<pre> ...
- // Construct the LicenseChecker with a Policy.
- mChecker = new LicenseChecker(
- this, new ServerManagedPolicy(this,
- new AESObfuscator(SALT, getPackageName(), deviceId)),
- BASE64_PUBLIC_KEY // Your public licensing key.
- );
- ...
-</pre>
-
-<p>For a complete example, see MainActivity in the LVL sample application.</p>
-
-
-<h2 id="impl-lc">Checking the License from an Activity</h2>
-
-<p>Once you've implemented a {@code Policy} for managing access to your application, the
-next step is to add a license check to your application, which initiates a query
-to the licensing server if needed and manages access to the application based on
-the license response. All of the work of adding the license check and handling
-the response takes place in your main {@link android.app.Activity} source file.
-</p>
-
-<p>To add the license check and handle the response, you must:</p>
-
-<ol>
- <li><a href="#imports">Add imports</a></li>
- <li><a href="#lc-impl">Implement LicenseCheckerCallback</a> as a private inner class</li>
- <li><a href="#thread-handler">Create a Handler</a> for posting from LicenseCheckerCallback to the UI thread</li>
- <li><a href="#lc-lcc">Instantiate LicenseChecker</a> and LicenseCheckerCallback</li>
- <li><a href="#check-access">Call checkAccess()</a> to initiate the license check</li>
- <li><a href="#account-key">Embed your public key</a> for licensing</li>
- <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method</a> to close IPC connections.</li>
-</ol>
-
-<p>The sections below describe these tasks. </p>
-
-<h3 id="lc-overview">Overview of license check and response</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Example: MainActivity</h2>
-
-<p>The sample application included with the LVL provides a full example of how
-to initiate a license check and handle the result, in the
-<code>MainActivity.java</code> file.</p>
-
-</div>
-</div>
-
-<p>In most cases, you should add the license check to your application's main
-{@link android.app.Activity}, in the {@link android.app.Activity#onCreate onCreate()} method. This
-ensures that when the user launches your application directly, the license check
-will be invoked immediately. In some cases, you can add license checks in other
-locations as well. For example, if your application includes multiple Activity
-components that other applications can start by {@link android.content.Intent},
-you could add license checks in those Activities.</p>
-
-<p>A license check consists of two main actions: </p>
-
-<ul>
-<li>A call to a method to initiate the license check &mdash; in the LVL, this is
-a call to the <code>checkAccess()</code> method of a {@code LicenseChecker} object that
-you construct.</li>
-<li>A callback that returns the result of the license check. In the LVL, this is
-a <code>LicenseCheckerCallback</code> interface that you implement. The
-interface declares two methods, <code>allow()</code> and
-<code>dontAllow()</code>, which are invoked by the library based on to the
-result of the license check. You implement these two methods with whatever logic
-you need, to allow or disallow the user access to your application. Note that
-these methods do not determine <em>whether</em> to allow access &mdash; that
-determination is the responsibility of your {@code Policy} implementation. Rather, these
-methods simply provide the application behaviors for <em>how</em> to allow and
-disallow access (and handle application errors).
- <p>The <code>allow()</code> and <code>dontAllow()</code> methods do provide a "reason"
-for their response, which can be one of the {@code Policy} values, {@code LICENSED},
-{@code NOT_LICENSED}, or {@code RETRY}. In particular, you should handle the case in which
-the method receives the {@code RETRY} response for {@code dontAllow()} and provide the user with an
-"Retry" button, which might have happened because the service was unavailable during the
-request.</p></li>
-</ul>
-
-<div style="margin-bottom:2em;">
-
-<img src="{@docRoot}images/licensing_flow.png" style="text-align:left;margin-bottom:0;margin-left:3em;" />
-<div style="margin:.5em 0 1.5em 2em;padding:0"><strong>Figure 6.</strong> Overview of a
-typical license check interaction.</div>
-</div>
-
-<p>The diagram above illustrates how a typical license check takes place: </p>
-
-<ol>
-<li>Code in the application's main Activity instantiates {@code LicenseCheckerCallback}
-and {@code LicenseChecker} objects. When constructing {@code LicenseChecker}, the code passes in
-{@link android.content.Context}, a {@code Policy} implementation to use, and the
-publisher account's public key for licensing as parameters. </li>
-<li>The code then calls the <code>checkAccess()</code> method on the
-{@code LicenseChecker} object. The method implementation calls the {@code Policy} to determine
-whether there is a valid license response cached locally, in
-{@link android.content.SharedPreferences}.
- <ul>
- <li>If so, the <code>checkAccess()</code> implementation calls
- <code>allow()</code>.</li>
- <li>Otherwise, the {@code LicenseChecker} initiates a license check request that is sent
- to the licensing server.</li>
- </ul>
-
-<p class="note"><strong>Note:</strong> The licensing server always returns
-<code>LICENSED</code> when you perform a license check of a draft application.</p>
-</li>
-<li>When a response is received, {@code LicenseChecker} creates a LicenseValidator that
-verifies the signed license data and extracts the fields of the response, then
-passes them to your {@code Policy} for further evaluation.
- <ul>
- <li>If the license is valid, the {@code Policy} caches the response in
-{@link android.content.SharedPreferences} and notifies the validator, which then calls the
-<code>allow()</code> method on the {@code LicenseCheckerCallback} object. </li>
- <li>If the license not valid, the {@code Policy} notifies the validator, which calls
-the <code>dontAllow()</code> method on {@code LicenseCheckerCallback}. </li>
- </ul>
-</li>
-<li>In case of a recoverable local or server error, such as when the network is
-not available to send the request, {@code LicenseChecker} passes a {@code RETRY} response to
-your {@code Policy} object's <code>processServerResponse()</code> method.
- <p>Also, both the {@code allow()} and {@code dontAllow()} callback methods receive a
-<code>reason</code> argument. The {@code allow()} method's reason is usually {@code
-Policy.LICENSED} or {@code Policy.RETRY} and the {@code dontAllow()} reason is usually {@code
-Policy.NOT_LICENSED} or {@code Policy.RETRY}. These response values are useful so you can show
-an appropriate response for the user, such as by providing a "Retry" button when {@code
-dontAllow()} responds with {@code Policy.RETRY}, which might have been because the service was
-unavailable.</p></li>
-<li>In case of a application error, such as when the application attempts to
-check the license of an invalid package name, {@code LicenseChecker} passes an error
-response to the LicenseCheckerCallback's <code>applicationError()</code>
-method. </li>
-</ol>
-
-<p>Note that, in addition to initiating the license check and handling the
-result, which are described in the sections below, your application also needs
-to provide a <a href="#impl-Policy">Policy implementation</a> and, if the {@code Policy}
-stores response data (such as ServerManagedPolicy), an <a
-href="#impl-Obfuscator">Obfuscator</a> implementation. </p>
-
-
-<h3 id="imports">Add imports</h3>
-
-<p>First, open the class file of the application's main Activity and import
-{@code LicenseChecker} and {@code LicenseCheckerCallback} from the LVL package.</p>
-
-<pre> import com.android.vending.licensing.LicenseChecker;
- import com.android.vending.licensing.LicenseCheckerCallback;</pre>
-
-<p>If you are using the default {@code Policy} implementation provided with the LVL,
-ServerManagedPolicy, import it also, together with the AESObfuscator. If you are
-using a custom {@code Policy} or {@code Obfuscator}, import those instead. </p>
-
-<pre> import com.android.vending.licensing.ServerManagedPolicy;
- import com.android.vending.licensing.AESObfuscator;</pre>
-
-<h3 id="lc-impl">Implement LicenseCheckerCallback as a private inner class</h3>
-
-<p>{@code LicenseCheckerCallback} is an interface provided by the LVL for handling
-result of a license check. To support licensing using the LVL, you must
-implement {@code LicenseCheckerCallback} and
-its methods to allow or disallow access to the application.</p>
-
-<p>The result of a license check is always a call to one of the
-{@code LicenseCheckerCallback} methods, made based on the validation of the response
-payload, the server response code itself, and any additional processing provided
-by your {@code Policy}. Your application can implement the methods in any way needed. In
-general, it's best to keep the methods simple, limiting them to managing UI
-state and application access. If you want to add further processing of license
-responses, such as by contacting a backend server or applying custom constraints,
-you should consider incorporating that code into your {@code Policy}, rather than
-putting it in the {@code LicenseCheckerCallback} methods. </p>
-
-<p>In most cases, you should declare your implementation of
-{@code LicenseCheckerCallback} as a private class inside your application's main
-Activity class. </p>
-
-<p>Implement the <code>allow()</code> and <code>dontAllow()</code> methods as
-needed. To start with, you can use simple result-handling behaviors in the
-methods, such as displaying the license result in a dialog. This helps you get
-your application running sooner and can assist with debugging. Later, after you
-have determined the exact behaviors you want, you can add more complex handling.
-</p>
-
-<p>Some suggestions for handling unlicensed responses in
-<code>dontAllow()</code> include: </p>
-
-<ul>
-<li>Display a "Try again" dialog to the user, including a button to initiate a
-new license check if the <code>reason</code> supplied is {@code Policy.RETRY}. </li>
-<li>Display a "Purchase this application" dialog, including a button that
-deep-links the user to the application's details page on Google Play, from which the
-use can purchase the application. For more information on how to set up such
-links, see <a
-href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>. </li>
-<li>Display a Toast notification that indicates that the features of the
-application are limited because it is not licensed. </li>
-</ul>
-
-<p>The example below shows how the LVL sample application implements
-{@code LicenseCheckerCallback}, with methods that display the license check result in a
-dialog. </p>
-
-<pre>
-private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
- public void allow(int reason) {
- if (isFinishing()) {
- // Don't update UI if Activity is finishing.
- return;
- }
- // Should allow user access.
- displayResult(getString(R.string.allow));
- }
-
- public void dontAllow(int reason) {
- if (isFinishing()) {
- // Don't update UI if Activity is finishing.
- return;
- }
- displayResult(getString(R.string.dont_allow));
-
- if (reason == Policy.RETRY) {
- // If the reason received from the policy is RETRY, it was probably
- // due to a loss of connection with the service, so we should give the
- // user a chance to retry. So show a dialog to retry.
- showDialog(DIALOG_RETRY);
- } else {
- // Otherwise, the user is not licensed to use this app.
- // Your response should always inform the user that the application
- // is not licensed, but your behavior at that point can vary. You might
- // provide the user a limited access version of your app or you can
- // take them to Google Play to purchase the app.
- showDialog(DIALOG_GOTOMARKET);
- }
- }
-}
-</pre>
-
-<p>Additionally, you should implement the <code>applicationError()</code>
-method, which the LVL calls to let your application handle errors that are not
-retryable. For a list of such errors, see <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> in the <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>. You can implement
-the method in any way needed. In most cases, the
-method should log the error code and call <code>dontAllow()</code>.</p>
-
-<h3 id="thread-handler">Create a Handler for posting from LicenseCheckerCallback
-to the UI thread</h3>
-
-<p>During a license check, the LVL passes the request to the Google Play
-application, which handles communication with the licensing server. The LVL
-passes the request over asynchronous IPC (using {@link android.os.Binder}) so
-the actual processing and network communication do not take place on a thread
-managed by your application. Similarly, when the Google Play application
-receives the result, it invokes a callback method over IPC, which in turn
-executes in an IPC thread pool in your application's process.</p>
-
-<p>The {@code LicenseChecker} class manages your application's IPC communication with
-the Google Play application, including the call that sends the request and
-the callback that receives the response. {@code LicenseChecker} also tracks open license
-requests and manages their timeouts. </p>
-
-<p>So that it can handle timeouts properly and also process incoming responses
-without affecting your application's UI thread, {@code LicenseChecker} spawns a
-background thread at instantiation. In the thread it does all processing of
-license check results, whether the result is a response received from the server
-or a timeout error. At the conclusion of processing, the LVL calls your
-{@code LicenseCheckerCallback} methods from the background thread. </p>
-
-<p>To your application, this means that:</p>
-
-<ol>
-<li>Your {@code LicenseCheckerCallback} methods will be invoked, in many cases, from a
-background thread.</li>
-<li>Those methods won't be able to update state or invoke any processing in the
-UI thread, unless you create a Handler in the UI thread and have your callback
-methods post to the Handler.</li>
-</ol>
-
-<p>If you want your {@code LicenseCheckerCallback} methods to update the UI thread,
-instantiate a {@link android.os.Handler} in the main Activity's
-{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
-as shown below. In this example, the LVL sample application's
-{@code LicenseCheckerCallback} methods (see above) call <code>displayResult()</code> to
-update the UI thread through the Handler's
-{@link android.os.Handler#post(java.lang.Runnable) post()} method.</p>
-
-<pre>private Handler mHandler;
-
- &#64;Override
- public void onCreate(Bundle savedInstanceState) {
- ...
- mHandler = new Handler();
- }
-</pre>
-
-<p>Then, in your {@code LicenseCheckerCallback} methods, you can use Handler methods to
-post Runnable or Message objects to the Handler. Here's how the sample
-application included in the LVL posts a Runnable to a Handler in the UI thread
-to display the license status.</p>
-
-<pre> private void displayResult(final String result) {
- mHandler.post(new Runnable() {
- public void run() {
- mStatusText.setText(result);
- setProgressBarIndeterminateVisibility(false);
- mCheckLicenseButton.setEnabled(true);
- }
- });
- }
-</pre>
-
-<h3 id="lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</h3>
-
-<p>In the main Activity's
-{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
-create private instances of LicenseCheckerCallback and {@code LicenseChecker}. You must
-instantiate {@code LicenseCheckerCallback} first, because you need to pass a reference
-to that instance when you call the constructor for {@code LicenseChecker}. </p>
-
-<p>When you instantiate {@code LicenseChecker}, you need to pass in these parameters:</p>
-
-<ul>
-<li>The application {@link android.content.Context}</li>
-<li>A reference to the {@code Policy} implementation to use for the license check. In
-most cases, you would use the default {@code Policy} implementation provided by the LVL,
-ServerManagedPolicy. </li>
-<li>The String variable holding your publisher account's public key for
-licensing. </li>
-</ul>
-
-<p>If you are using ServerManagedPolicy, you won't need to access the class
-directly, so you can instantiate it in the {@code LicenseChecker} constructor,
-as shown in the example below. Note that you need to pass a reference to a new
-Obfuscator instance when you construct ServerManagedPolicy.</p>
-
-<p>The example below shows the instantiation of {@code LicenseChecker} and
-{@code LicenseCheckerCallback} from the <code>onCreate()</code> method of an Activity
-class. </p>
-
-<pre>public class MainActivity extends Activity {
- ...
- private LicenseCheckerCallback mLicenseCheckerCallback;
- private LicenseChecker mChecker;
-
- &#64;Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- ...
- // Construct the LicenseCheckerCallback. The library calls this when done.
- mLicenseCheckerCallback = new MyLicenseCheckerCallback();
-
- // Construct the LicenseChecker with a Policy.
- mChecker = new LicenseChecker(
- this, new ServerManagedPolicy(this,
- new AESObfuscator(SALT, getPackageName(), deviceId)),
- BASE64_PUBLIC_KEY // Your public licensing key.
- );
- ...
- }
-}
-</pre>
-
-
-<p>Note that {@code LicenseChecker} calls the {@code LicenseCheckerCallback} methods from the UI
-thread <em>only</em> if there is valid license response cached locally. If the
-license check is sent to the server, the callbacks always originate from the
-background thread, even for network errors. </p>
-
-
-<h3 id="check-access">Call checkAccess() to initiate the license check</h3>
-
-<p>In your main Activity, add a call to the <code>checkAccess()</code> method of the
-{@code LicenseChecker} instance. In the call, pass a reference to your
-{@code LicenseCheckerCallback} instance as a parameter. If you need to handle any
-special UI effects or state management before the call, you might find it useful
-to call <code>checkAccess()</code> from a wrapper method. For example, the LVL
-sample application calls <code>checkAccess()</code> from a
-<code>doCheck()</code> wrapper method:</p>
-
-<pre> &#64;Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- ...
- // Call a wrapper method that initiates the license check
- doCheck();
- ...
- }
- ...
- private void doCheck() {
- mCheckLicenseButton.setEnabled(false);
- setProgressBarIndeterminateVisibility(true);
- mStatusText.setText(R.string.checking_license);
- mChecker.checkAccess(mLicenseCheckerCallback);
- }
-</pre>
-
-
-<h3 id="account-key">Embed your public key for licensing</h3>
-
-<p>For each publisher account, the Google Play service automatically
-generates a 2048-bit RSA public/private key pair that is used exclusively for
-licensing. The key pair is uniquely associated with the publisher account and is
-shared across all applications that are published through the account. Although
-associated with a publisher account, the key pair is <em>not</em> the same as
-the key that you use to sign your applications (or derived from it).</p>
-
-<p>The Google Play publisher site exposes the public key for licensing to any
-developer signed in to the publisher account, but it keeps the private key
-hidden from all users in a secure location. When an application requests a
-license check for an application published in your account, the licensing server
-signs the license response using the private key of your account's key pair.
-When the LVL receives the response, it uses the public key provided by the
-application to verify the signature of the license response. </p>
-
-<p>To add licensing to an application, you must obtain your publisher account's
-public key for licensing and copy it into your application. Here's how to find
-your account's public key for licensing:</p>
-
-<ol>
-<li>Go to the Google Play <a
-href="http://play.google.com/apps/publish">publisher site</a> and sign in.
-Make sure that you sign in to the account from which the application you are
-licensing is published (or will be published). </li>
-<li>In the account home page, locate the "Edit profile" link and click it. </li>
-<li>In the Edit Profile page, locate the "Licensing" pane, shown below. Your
-public key for licensing is given in the "Public key" text box. </li>
-</ol>
-
-<p>To add the public key to your application, simply copy/paste the key string
-from the text box into your application as the value of the String variable
-<code>BASE64_PUBLIC_KEY</code>. When you are copying, make sure that you have
-selected the entire key string, without omitting any characters. </p>
-
-<p>Here's an example from the LVL sample application:</p>
-
-<pre> public class MainActivity extends Activity {
- private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG ... "; //truncated for this example
- ...
- }
-</pre>
-
-<h3 id="handler-cleanup">Call your LicenseChecker's onDestroy() method
-to close IPC connections</h3>
-
-<p>Finally, to let the LVL clean up before your application
-{@link android.content.Context} changes, add a call to the {@code LicenseChecker}'s
-<code>onDestroy()</code> method from your Activity's
-{@link android.app.Activity#onDestroy()} implementation. The call causes the
-{@code LicenseChecker} to properly close any open IPC connection to the Google Play
-application's ILicensingService and removes any local references to the service
-and handler.</p>
-
-<p>Failing to call the {@code LicenseChecker}'s <code>onDestroy()</code> method
-can lead to problems over the lifecycle of your application. For example, if the
-user changes screen orientation while a license check is active, the application
-{@link android.content.Context} is destroyed. If your application does not
-properly close the {@code LicenseChecker}'s IPC connection, your application will crash
-when the response is received. Similarly, if the user exits your application
-while a license check is in progress, your application will crash when the
-response is received, unless it has properly called the
-{@code LicenseChecker}'s <code>onDestroy()</code> method to disconnect from the service.
-</p>
-
-<p>Here's an example from the sample application included in the LVL, where
-<code>mChecker</code> is the {@code LicenseChecker} instance:</p>
-
-<pre> &#64;Override
- protected void onDestroy() {
- super.onDestroy();
- mChecker.onDestroy();
- ...
- }
-</pre>
-
-<p>If you are extending or modifying {@code LicenseChecker}, you might also need to call
-the {@code LicenseChecker}'s <code>finishCheck()</code> method, to clean up any open IPC
-connections.</p>
-
-<h2 id="impl-DeviceLimiter">Implementing a DeviceLimiter</h2>
-
-<p>In some cases, you might want your {@code Policy} to limit the number of actual
-devices that are permitted to use a single license. This would prevent a user
-from moving a licensed application onto a number of devices and using the
-application on those devices under the same account ID. It would also prevent a
-user from "sharing" the application by providing the account information
-associated with the license to other individuals, who could then sign in to that
-account on their devices and access the license to the application. </p>
-
-<p>The LVL supports per-device licensing by providing a
-<code>DeviceLimiter</code> interface, which declares a single method,
-<code>allowDeviceAccess()</code>. When a LicenseValidator is handling a response
-from the licensing server, it calls <code>allowDeviceAccess()</code>, passing a
-user ID string extracted from the response.</p>
-
-<p>If you do not want to support device limitation, <strong>no work is
-required</strong> &mdash; the {@code LicenseChecker} class automatically uses a default
-implementation called NullDeviceLimiter. As the name suggests, NullDeviceLimiter
-is a "no-op" class whose <code>allowDeviceAccess()</code> method simply returns
-a <code>LICENSED</code> response for all users and devices. </p>
-
-<div style="border-left:4px solid #FFCF00;margin:1em;padding: 0 0 0 .5em">
-<p><strong>Caution:</strong> Per-device licensing is <em>not recommended for
-most applications</em> because:</p>
-<ul>
-<li>It requires that you provide a backend server to manage a users and devices
-mapping, and </li>
-<li>It could inadvertently result in a user being denied access to an
-application that they have legitimately purchased on another device.</li>
-</ul>
-</div>
-
-
-
-
-
-
-
-
-
-
-
-<h2 id="app-obfuscation">Obfuscating Your Code</h2>
-
-<p>To ensure the security of your application, particularly for a paid
-application that uses licensing and/or custom constraints and protections, it's
-very important to obfuscate your application code. Properly obfuscating your
-code makes it more difficult for a malicious user to decompile the application's
-bytecode, modify it &mdash; such as by removing the license check &mdash;
-and then recompile it.</p>
-
-<p>Several obfuscator programs are available for Android applications, including
-<a href="http://proguard.sourceforge.net/">ProGuard</a>, which also offers
-code-optimization features. The use of ProGuard or a similar program to obfuscate
-your code is <em>strongly recommended</em> for all applications that use Google
-Play Licensing. </p>
-
-<h2 id="app-publishing">Publishing a Licensed Application</h2>
-
-<p>When you are finished testing your license implementation, you are ready to
-publish the application on Google Play. Follow the normal steps to <a
-href="{@docRoot}tools/publishing/preparing.html">prepare</a>, <a
-href="{@docRoot}tools/publishing/app-signing.html">sign</a>, and then <a
-href="{@docRoot}distribute/googleplay/publish/preparing.html">publish the application</a>.
-</p>
-
-<h3>Removing Copy Protection</h3>
-
-<p>After uploading your licensed application, remember to remove copy protection
-from the application, if it is currently used. To check and remove copy
-protection, sign in to the publisher site and go the application's upload
-details page. In the Publishing options section, make sure that the Copy
-Protection radio button selection is "Off".</p>
-
-
-<h2 id="support">Where to Get Support</h2>
-
-<p>If you have questions or encounter problems while implementing or deploying
-publishing in your applications, please use the support resources listed in the
-table below. By directing your queries to the correct forum, you can get the
-support you need more quickly. </p>
-
-<p class="table-caption"><strong>Table 2.</strong> Developer support resources
-for Google Play Licensing Service.</p>
-
-<table>
-
-<tr>
-<th>Support Type</th>
-<th>Resource</th>
-<th>Range of Topics</th>
-</tr>
-<tr>
-<td rowspan="2">Development and testing issues</td>
-<td>Google Groups: <a
-href="http://groups.google.com/group/android-developers">android-developers</a>
-</td>
-<td rowspan="2">LVL download and integration, library projects, {@code Policy}
-questions, user experience ideas, handling of responses, {@code Obfuscator}, IPC, test
-environment setup</td>
-</tr>
-<tr>
-<td>Stack Overflow: <a
-href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/android</a></td>
-</tr>
-<tr>
-<td rowspan="2">Accounts, publishing, and deployment issues</td>
-<td><a href="http://www.google.com/support/forum/p/Android+Market">Google Play
-Help Forum</a></td>
-<td rowspan="2">Publisher accounts, licensing key pair, test accounts, server
-responses, test responses, application deployment and results</td>
-</tr>
-<tr>
-<td><a
-href="http://market.android.com/support/bin/answer.py?answer=186113">Market
-Licensing Support FAQ</a></td>
-</tr>
-<tr>
-<td>LVL issue tracker</td>
-<td><a href="http://code.google.com/p/marketlicensing/issues/">Marketlicensing
-project issue tracker</a></td>
-<td>Bug and issue reports related specifically to the LVL source code classes
-and interface implementations</td>
-</tr>
-
-</table>
-
-<p>For general information about how to post to the groups listed above, see <a
-href="{@docRoot}resources/community-groups.html">Developer Forums</a> document
-in the Resources tab.</p>
-
-
diff --git a/docs/html/guide/google/play/licensing/index.jd b/docs/html/guide/google/play/licensing/index.jd
deleted file mode 100644
index d393738..0000000
--- a/docs/html/guide/google/play/licensing/index.jd
+++ /dev/null
@@ -1,61 +0,0 @@
-page.title=Application Licensing
-@jd:body
-
-
-<p>Google Play offers a licensing service that lets you enforce licensing policies for
-applications that you publish on Google Play. With Google Play Licensing, your application can
-query Google Play at run time to obtain the licensing status for the current user, then allow or
-disallow further use as appropriate. </p>
-
-<p>Using the service, you can apply a flexible licensing policy on an application-by-application
-basis&mdash;each application can enforce licensing in the way most appropriate for it. If necessary,
-an application can apply custom constraints based on the licensing status obtained from Google Play.
-For example, an application can check the licensing status and then apply custom constraints
-that allow the user to run it unlicensed for a specific validity period. An application can also
-restrict use of the application to a specific device, in addition to any other constraints. </p>
-
-<p>The licensing service is a secure means of controlling access to your applications. When an
-application checks the licensing status, the Google Play server signs the licensing status
-response using a key pair that is uniquely associated with the publisher account. Your application
-stores the public key in its compiled <code>.apk</code> file and uses it to verify the licensing
-status response.</p>
-
-<p>Any application that you publish through Google Play can use the Google Play Licensing
-service. No special account or registration is needed. Additionally, because the service uses no
-dedicated framework APIs, you can add licensing to any application that uses a minimum API level of
-3 or higher.</p>
-
-<p class="note"><strong>Note:</strong> The Google Play Licensing service is primarily intended
-for paid applications that wish to verify that the current user did in fact pay for the application
-on Google Play. However, any application (including free apps) may use the licensing service
-to initiate the download of an APK expansion file. In which case, the request that your application
-sends to the licensing service is not to check whether the user paid for the app, but to request the
-URL of the expansion files. For information about downloading expansion files for your application,
-read the guide to <a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>.</p>
-
-
-<p>To learn more about Google Play's application licensing service and start integrating it into
-your applications, read the following documents:</p>
-
-<dl>
- <dt><strong><a href="{@docRoot}guide/google/play/licensing/overview.html">Licensing
-Overview</a></strong></dt>
- <dd>Describes how the service works and what a typical licensing implementation looks
-like.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for
-Licensing</a></strong></dt>
- <dd>Explains how to set up your Google Play account, development environment, and
-testing environment in order to add licensing to your app.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
-Licensing to Your App</a></strong></dt>
- <dd>Provides a step-by-step guide to add licensing verification to your application.</dd>
- <dt><strong><a href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing
-Reference</a></strong></dt>
- <dd>Provides detailed information about the licensing library's classes and the service response
-codes.</dd>
-</dl>
-
-
-
-
-
diff --git a/docs/html/guide/google/play/licensing/licensing-reference.jd b/docs/html/guide/google/play/licensing/licensing-reference.jd
deleted file mode 100644
index d3d5224..0000000
--- a/docs/html/guide/google/play/licensing/licensing-reference.jd
+++ /dev/null
@@ -1,439 +0,0 @@
-page.title=Licensing Reference
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>In this document</h2>
- <ol>
- <li><a href="#lvl-summary">LVL Classes and Interfaces</a></li>
- <li><a href="#server-response-codes">Server Response Codes</a></li>
- <li><a href="#extras">Server Response Extras</a></li>
- </ol>
-
-</div>
-</div>
-
-
-<h2 id="lvl-summary">LVL Classes and Interfaces</h2>
-
-<p>Table 1 lists all of the source files in the License Verification
-Library (LVL) available through the Android SDK. All of the files are part of
-the <code>com.android.vending.licensing</code> package.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Summary of LVL library
-classes and interfaces.</p>
-
-<div style="width:99%">
-<table width="100%">
-
-<tr>
-<th width="15%">Category</th>
-<th width="20%">Name</th>
-<th width="100%">Description</th>
-</tr>
-
-<tr>
-<td rowspan="2">License check and result</td>
-<td>LicenseChecker</td>
-<td>Class that you instantiate (or subclass) to initiate a license check.</td>
-</tr>
-<tr>
-<td><em>LicenseCheckerCallback</em></td>
-<td>Interface that you implement to handle result of the license check.</td>
-</tr>
-
-<tr>
-<td rowspan="3" width="15%">Policy</td>
-<td width="20%"><em>Policy</em></td>
-<td width="100%">Interface that you implement to determine whether to allow
-access to the application, based on the license response. </td>
-</tr>
-<tr>
-<td>ServerManagedPolicy</td>
-<td width="100%">Default {@code Policy} implementation. Uses settings provided by the
-licensing server to manage local storage of license data, license validity,
-retry.</td>
-</tr>
-<tr>
-<td>StrictPolicy</td>
-<td>Alternative {@code Policy} implementation. Enforces licensing based on a direct
-license response from the server only. No caching or request retry.</td>
-</tr>
-
-<tr>
-<td rowspan="2" width="15%">Data obfuscation <br><em>(optional)</em></td>
-<td width="20%"><em>Obfuscator</em></td>
-<td width="100%">Interface that you implement if you are using a {@code Policy} (such as
-ServerManagedPolicy) that caches license response data in a persistent store.
-Applies an obfuscation algorithm to encode and decode data being written or
-read.</td>
-</tr>
-<tr>
-<td>AESObfuscator</td>
-<td>Default Obfuscator implementation that uses AES encryption/decryption
-algorithm to obfuscate/unobfuscate data.</td>
-</tr>
-
-<tr>
-<td rowspan="2" width="15%">Device limitation<br><em>(optional)</em></td>
-<td width="20%"><em>DeviceLimiter</em></td>
-<td width="100%">Interface that you implement if you want to restrict use of an
-application to a specific device. Called from LicenseValidator. Implementing
-DeviceLimiter is not recommended for most applications because it requires a
-backend server and may cause the user to lose access to licensed applications,
-unless designed with care.</td>
-</tr>
-<tr>
-<td>NullDeviceLimiter</td>
-<td>Default DeviceLimiter implementation that is a no-op (allows access to all
-devices).</td>
-</tr>
-
-<tr>
-<td rowspan="6" width="15%">Library core, no integration needed</td>
-<td width="20%">ResponseData</td>
-<td width="100%">Class that holds the fields of a license response.</td>
-</tr>
-<tr>
-<td>LicenseValidator</td>
-<td>Class that decrypts and verifies a response received from the licensing
-server.</td>
-</tr>
-<tr>
-<td>ValidationException</td>
-<td>Class that indicates errors that occur when validating the integrity of data
-managed by an Obfuscator.</td>
-</tr>
-<tr>
-<td>PreferenceObfuscator</td>
-<td>Utility class that writes/reads obfuscated data to the system's
-{@link android.content.SharedPreferences} store.</td>
-</tr>
-<tr>
-<td><em>ILicensingService</em></td>
-<td>One-way IPC interface over which a license check request is passed to the
-Google Play client.</td>
-</tr>
-<tr>
-<td><em>ILicenseResultListener</em></td>
-<td>One-way IPC callback implementation over which the application receives an
-asynchronous response from the licensing server.</td>
-</tr>
-
-</table>
-</div>
-
-
-<h2 id="server-response-codes">Server Response Codes</h2>
-
-<p>Table 2 lists all of the license response codes supported by the
-licensing server. In general, an application should handle all of these response
-codes. By default, the LicenseValidator class in the LVL provides all of the
-necessary handling of these response codes for you. </p>
-
-<p class="table-caption"><strong>Table 2.</strong> Summary of response codes
-returned by the Google Play server in a license response.</p>
-
-<table>
-
-<tr>
-<th>Response Code</th>
-<th>Description</th>
-<th>Signed?</th>
-<th>Extras</th>
-<th>Comments</th>
-</tr>
-<tr>
-<td>{@code LICENSED}</td>
-<td>The application is licensed to the user. The user has purchased the
-application or the application only exists as a draft.</td>
-<td>Yes</td>
-<td><code>VT</code>,&nbsp;<code>GT</code>, <code>GR</code></td>
-<td><em>Allow access according to {@code Policy} constraints.</em></td>
-</tr>
-<tr>
-<td>{@code LICENSED_OLD_KEY}</td>
-<td>The application is licensed to the user, but there is an updated application
-version available that is signed with a different key. </td>
-<td>Yes </td>
-<td><code>VT</code>, <code>GT</code>, <code>GR</code>, <code>UT</code></td>
-<td><em>Optionally allow access according to {@code Policy} constraints.</em>
-<p style="margin-top:.5em;">Can indicate that the key pair used by the installed
-application version is invalid or compromised. The application can allow access
-if needed or inform the user that an upgrade is available and limit further use
-until upgrade.</p>
-</td>
-</tr>
-<tr>
-<td>{@code NOT_LICENSED}</td>
-<td>The application is not licensed to the user.</td>
-<td>No</td>
-<td></td>
-<td><em>Do not allow access.</em></td>
-</tr>
-<tr>
-<td>{@code ERROR_CONTACTING_SERVER}</td>
-<td>Local error &mdash; the Google Play application was not able to reach the
-licensing server, possibly because of network availability problems. </td>
-<td>No</td>
-<td></td>
-<td><em>Retry the license check according to {@code Policy} retry limits.</em></td>
-</tr>
-<tr>
-<td>{@code ERROR_SERVER_FAILURE}</td>
-<td>Server error &mdash; the server could not load the publisher account's key
-pair for licensing.</td>
-<td>No</td>
-<td></td>
-<td><em>Retry the license check according to {@code Policy} retry limits.</em>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_INVALID_PACKAGE_NAME}</td>
-<td>Local error &mdash; the application requested a license check for a package
-that is not installed on the device. </td>
-<td>No </td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Typically caused by a development error.</p>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_NON_MATCHING_UID}</td>
-<td>Local error &mdash; the application requested a license check for a package
-whose UID (package, user ID pair) does not match that of the requesting
-application. </td>
-<td>No </td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Typically caused by a development error.</p>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_NOT_MARKET_MANAGED}</td>
-<td>Server error &mdash; the application (package name) was not recognized by
-Google Play. </td>
-<td>No</td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Can indicate that the application was not published
-through Google Play or that there is an development error in the licensing
-implementation.</p>
-</td>
-</tr>
-
-</table>
-
-<p class="note"><strong>Note:</strong> As documented in <a
-href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">
-Setting Up The Testing Environment</a>, the response code can be manually
-overridden for the application developer and any registered test users via the
-Google Play publisher site.
-<br/><br/>
-Additionally, as noted above, applications that are in draft mode (in other
-words, applications that have been uploaded but have <em>never</em> been
-published) will return {@code LICENSED} for all users, even if not listed as a test
-user. Since the application has never been offered for download, it is assumed
-that any users running it must have obtained it from an authorized channel for
-testing purposes.</p>
-
-
-
-
-<h2 id="extras">Server Response Extras</h2>
-
-<p>To assist your application in managing access to the application across the application refund
-period and provide other information, The licensing server includes several pieces of
-information in the license responses. Specifically, the service provides recommended values for the
-application's license validity period, retry grace period, maximum allowable retry count, and other
-settings. If your application uses <a href="{@docRoot}guide/google/play/expansion-files.html">APK
-expansion files</a>, the response also includes the file names, sizes, and URLs. The server appends
-the settings as key-value pairs in the license response "extras" field. </p>
-
-<p>Any {@code Policy} implementation can extract the extras settings from the license
-response and use them as needed. The LVL default {@code Policy} implementation, <a
-href="{@docRoot}guide/google/play/licensing/adding-licensing.html#ServerManagedPolicy">{@code
-ServerManagedPolicy}</a>, serves as a working
-implementation and an illustration of how to obtain, store, and use the
-settings. </p>
-
-<p class="table-caption"><strong>Table 3.</strong> Summary of
-license-management settings supplied by the Google Play server in a license
-response.</p>
-
-<table>
-<tr>
-<th>Extra</th><th>Description</th>
-</tr>
-
-<tr>
- <td>{@code VT}</td>
- <td>License validity timestamp. Specifies the date/time at which the current
-(cached) license response expires and must be rechecked on the licensing server. See the section
-below about <a href="#VT">License validity period</a>.
- </td>
-</tr>
-<tr>
- <td>{@code GT}</td>
- <td>Grace period timestamp. Specifies the end of the period during which a
-Policy may allow access to the application, even though the response status is
-{@code RETRY}. <p>The value is managed by the server, however a typical value would be 5
-or more days. See the section
-below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
-</tr>
-<tr>
- <td>{@code GR}</td>
- <td>Maximum retries count. Specifies how many consecutive {@code RETRY} license checks
-the {@code Policy} should allow, before denying the user access to the application.
-<p>The value is managed by the server, however a typical value would be "10" or
-higher. See the section
-below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
-</tr>
-<tr>
- <td>{@code UT}</td>
- <td>Update timestamp. Specifies the day/time when the most recent update to
-this application was uploaded and published. <p>The server returns this extra
-only for {@code LICENSED_OLD_KEYS} responses, to allow the {@code Policy} to determine how much
-time has elapsed since an update was published with new licensing keys before
-denying the user access to the application. </p></td>
-</tr>
-
-
-<!-- APK EXPANSION FILE RESPONSES -->
-
-<tr>
- <td>{@code FILE_URL1} or {@code FILE_URL2}</td>
- <td>The URL for an expansion file (1 is for the main file, 2 is the patch file). Use this to
-download the file over HTTP.</td>
-</tr>
-<tr>
- <td>{@code FILE_NAME1} or {@code FILE_NAME2}</td>
- <td>The expansion file's name (1 is for the main file, 2 is the patch file). You must use this
-name when saving the file on the device.</td>
-</tr>
-<tr>
- <td>{@code FILE_SIZE1} or {@code FILE_SIZE2}</td>
- <td>The size of the file in bytes (1 is for the main file, 2 is the patch file). Use this to
-assist with downloading and to ensure that enough space is available on the device's shared
-storage location before downloading.</td>
-</tr>
-
-</table>
-
-
-
-<h4 id="VT">License validity period</h4>
-
-<p>The Google Play licensing server sets a license validity period for all
-downloaded applications. The period expresses the interval of time over which an
-application's license status should be considered as unchanging and cacheable by
-a licensing {@code Policy} in the application. The licensing server includes the
-validity period in its response to all license checks, appending an
-end-of-validity timestamp to the response as an extra under the key {@code VT}. A
-{@code Policy} can extract the VT key value and use it to conditionally allow access to
-the application without rechecking the license, until the validity period
-expires. </p>
-
-<p>The license validity signals to a licensing {@code Policy} when it must recheck the
-licensing status with the licensing server. It is <em>not</em> intended to imply
-whether an application is actually licensed for use. That is, when an
-application's license validity period expires, this does not mean that the
-application is no longer licensed for use &mdash; rather, it indicates only that
-the {@code Policy} must recheck the licensing status with the server. It follows that,
-as long as the license validity period has not expired, it is acceptable for the
-{@code Policy} to cache the initial license status locally and return the cached license
-status instead of sending a new license check to the server.</p>
-
-<p>The licensing server manages the validity period as a means of helping the
-application properly enforce licensing across the refund period offered by
-Google Play for paid applications. It sets the validity period based on
-whether the application was purchased and, if so, how long ago. Specifically,
-the server sets a validity period as follows:</p>
-
-<ul>
-<li>For a paid application, the server sets the initial license validity period
-so that the license response remains valid for as long as the application is
-refundable. A licensing {@code Policy} in the application may cache the
-result of the initial license check and does not need to recheck the license
-until the validity period has expired.</li>
-<li>When an application is no longer refundable, the server
-sets a longer validity period &mdash; typically a number of days. </li>
-
-<!-- TODO: Verify the following behavior is still true w/ OBB: -->
-<li>For a free application, the server sets the validity period to a very high
-value (<code>long.MAX_VALUE</code>). This ensures that, provided the {@code Policy} has
-cached the validity timestamp locally, it will not need to recheck the
-license status of the application in the future.</li>
-</ul>
-
-<p>The {@code ServerManagedPolicy} implementation uses the extracted timestamp
-(<code>mValidityTimestamp</code>) as a primary condition for determining whether
-to recheck the license status with the server before allowing the user access to
-the application. </p>
-
-
-<h4 id="GTGR">Retry period and maximum retry count</h4>
-
-<p>In some cases, system or network conditions can prevent an application's
-license check from reaching the licensing server, or prevent the server's
-response from reaching the Google Play client application. For example, the
-user might launch an application when there is no cell network or data
-connection available&mdash;such as when on an airplane&mdash;or when the
-network connection is unstable or the cell signal is weak. </p>
-
-<p>When network problems prevent or interrupt a license check, the Google
-Play client notifies the application by returning a {@code RETRY} response code to
-the {@code Policy}'s <code>processServerResponse()</code> method. In the case of system
-problems, such as when the application is unable to bind with Google Play's
-{@code ILicensingService} implementation, the {@code LicenseChecker} library itself calls the
-Policy <code>processServerResonse()</code> method with a {@code RETRY} response code.
-</p>
-
-<p>In general, the {@code RETRY} response code is a signal to the application that an
-error has occurred that has prevented a license check from completing.
-
-<p>The Google Play server helps an application to manage licensing under
-error conditions by setting a retry "grace period" and a recommended maximum
-retries count. The server includes these values in all license check responses,
-appending them as extras under the keys {@code GT} and {@code GR}. </p>
-
-<p>The application {@code Policy} can extract the {@code GT} and {@code GR} extras and use them to
-conditionally allow access to the application, as follows:</p>
-
-<ul>
-<li>For a license check that results in a {@code RETRY} response, the {@code Policy} should
-cache the {@code RETRY} response code and increment a count of {@code RETRY} responses.</li>
-<li>The {@code Policy} should allow the user to access the application, provided that
-either the retry grace period is still active or the maximum retries count has
-not been reached.</li>
-</ul>
-
-<p>The {@code ServerManagedPolicy} uses the server-supplied {@code GT} and {@code GR} values as
-described above. The example below shows the conditional handling of the retry
-responses in the <code>allow()</code> method. The count of {@code RETRY} responses is
-maintained in the <code>processServerResponse()</code> method, not shown. </p>
-
-
-<pre>
-public boolean allowAccess() {
- long ts = System.currentTimeMillis();
- if (mLastResponse == LicenseResponse.LICENSED) {
- // Check if the LICENSED response occurred within the validity timeout.
- if (ts &lt;= mValidityTimestamp) {
- // Cached LICENSED response is still valid.
- return true;
- }
- } else if (mLastResponse == LicenseResponse.RETRY &amp;&amp;
- ts &lt; mLastResponseTime + MILLIS_PER_MINUTE) {
- // Only allow access if we are within the retry period or we haven't used up our
- // max retries.
- return (ts &lt;= mRetryUntil || mRetryCount &lt;= mMaxRetries);
- }
- return false;
-}</pre>
-
diff --git a/docs/html/guide/google/play/licensing/overview.jd b/docs/html/guide/google/play/licensing/overview.jd
deleted file mode 100644
index 467a3a2..0000000
--- a/docs/html/guide/google/play/licensing/overview.jd
+++ /dev/null
@@ -1,246 +0,0 @@
-page.title=Licensing Overview
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>Quickview</h2>
- <ul>
- <li>Licensing allows you to verify your app was purchased from Google Play</li>
- <li>Your app maintains control of how it enforces its licensing status</li>
- <li>The service is free for all developers who publish on Google Play</li>
- </ul>
-
- <h2>In this document</h2>
- <ol>
- <li><a href="#Secure">License Responses are Secure</a></li>
- <li><a href="#LVL">Licensing Verification Library</a></li>
- <li><a href="#Reqs">Requirements and Limitations</a></li>
- <li><a href="#CopyProtection">Replacement for Copy Protection</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>Google Play Licensing is a network-based service that lets an application query a trusted
-Google Play licensing server to determine whether the application is licensed to the current
-device user. The licensing service is based on the capability of the Google Play licensing server
-to determine whether a given user is licensed to use a given application. Google Play considers a
-user to be licensed if the user is a recorded purchaser of the application.</p>
-
-<p>The request starts when your application makes a request to a service hosted by
-the Google Play client application. The Google Play application then sends a request to
-the licensing server and receives the result. The Google Play application sends
-the result to your application, which can allow or disallow further use of the
-application as needed.</p>
-
-<p class="note"><strong>Note:</strong> If a paid application has been uploaded to Google Play but
-saved only as a draft application (the app is unpublished), the licensing server considers all users
-to be licensed users of the application (because it's not even possible to purchase the app).
-This exception is necessary in order for you to perform testing of your licensing
-implementation.</p>
-
-
-<div class="figure" style="width:469px">
-<img src="{@docRoot}images/licensing_arch.png" alt=""/>
-<p class="img-caption"><strong>Figure 1.</strong> Your application initiates a
-license check through the License Verification Library and the Google Play
-client, which handles communication with the Google Play server.</p>
-</div>
-
-
-<p>To properly identify the user and determine the license status, the licensing server requires
-information about the application and user&mdash;your application and the Google Play client work
-together to assemble the information and the Google Play client passes it to the server. </p>
-
-<p>To help you add licensing to your application, the Android SDK provides a downloadable set of
-library sources that you can include in your application project: the Google Market
-Licensing package. The License Verification Library (LVL) is a library you can add to your
-application that
-handles all of the licensing-related communication with the Google Play licensing service. With
-the LVL added to your application, your application can determine its licensing status for the
-current user by simply calling a method and implementing a callback that receives the status
-response.</p>
-
-<p>Your application does not query the licensing server
-directly, but instead calls the Google Play client over remote IPC to
-initiate a license request. In the license request:</p>
-
-<ul>
-<li>Your application provides: its package name, a nonce that is later used to
-validate any response from the server, and a callback over which the
-response can be returned asynchronously.</li>
-<li>The Google Play client collects the necessary information about the user and the device,
-such as the device's primary Google account username, IMSI, and other
-information. It then sends the license check request to the server on behalf of
-your application.</li>
-<li>The Google Play server evaluates the request using all available information, attempting
-to establish the user's identity to a sufficient level of confidence. The server
-then checks the user identity against purchase records for your application and
-returns a license response, which the Google Play client returns to your
-application over the IPC callback.</li>
-</ul>
-
-<p>You can choose when, and how often, you want your application to check its
-license and you have full control over how it handles the response, verifies the
-signed response data, and enforces access controls.</p>
-
-<p>Notice that during a license check, your application does not manage any
-network connections or use any licensing related APIs in the Android platform.</p>
-
-
-
-
-<h2 id="Secure">License Responses are Secure</h2>
-
-<p>To ensure the integrity of each license query, the server signs the license
-response data using an RSA key pair that is shared exclusively between the Google Play
-server and you.</p>
-
-<p>The licensing service generates a single licensing key pair for each
-publisher account and exposes the public key in your account's profile page. You must copy the
-public key from the web site and embed it in your application source code. The server retains the
-private key internally and uses it to sign license responses for the applications you
-publish with that account.</p>
-
-<p>When your application receives a signed response, it uses the embedded public
-key to verify the data. The use of public key cryptography in the licensing
-service makes it possible for the application to detect responses that have been
-tampered with or that are spoofed.</p>
-
-
-
-
-<h2 id="LVL">Licensing Verification Library</h2>
-
-<p>The Android SDK provides a downloadable package called the Google Market Licensing package,
-which includes the License Verification Library (LVL). The LVL greatly simplifies the process of
-adding licensing to your application and helps ensure a more secure, robust implementation for your
-application. The LVL provides internal classes that handle most of the standard operations of a
-license query, such as contacting the Google Play client to initiate a license request and
-verifying and validating the responses. It also exposes interfaces that let you easily plug in your
-custom code for defining licensing policy and managing access as needed by your application. The key
-LVL interfaces are: </p>
-
-<dl>
-<dt>{@code Policy}</dt>
- <dd>Your implementation determines whether to allow access to the
-application, based on the license response received from the server and any
-other data available (such as from a backend server associated with your
-application). The implementation can evaluate the various fields of the license
-response and apply other constraints, if needed. The implementation also lets
-you manage the handling of license checks that result in errors, such as network
-errors.</dd>
-
-<dt>{@code LicenseCheckerCallback}</dt>
- <dd>Your implementation manages access to the
-application, based on the result of the {@code Policy} object's handling of the license
-response. Your implementation can manage access in any way needed, including
-displaying the license result in the UI or directing the user to purchase the
-application (if not currently licensed).</dd>
-</dl>
-
-
-<p>To help you get started with a {@code Policy}, the LVL provides two fully complete
-{@code Policy} implementations that you can use without modification or adapt to your
-needs:</p>
-
-<dl>
-<dt><a href="adding-licensing.html#ServerManagedPolicy">{@code ServerManagedPolicy}</a></dt>
- <dd>A flexible {@code Policy}
-that uses settings provided by the licensing server to manage response caching
-and access to the application while the device is offline (such as when the
-user is on an airplane). For most applications, the use of
-{@code ServerManagedPolicy} is highly recommended.</dd>
-
-<dt><a href="adding-licensing.html#StrictPolicy">{@code StrictPolicy}</a></dt>
- <dd>A restrictive {@code Policy} that
-does not cache any response data and allows the application access <em>only</em>
-when the server returns a licensed response.</dd>
-</dl>
-
-<p>The LVL is available as a downloadable package of the Android SDK. The
-package includes both the LVL itself and an example application that shows how
-the library should be integrated with your application and how your application
-should manage response data, UI interaction, and error conditions. </p>
-
-<p>The LVL sources are provided as an Android <em>library project</em>, which
-means that you can maintain a single set of library sources and share them
-across multiple applications. A full test environment is also available through
-the SDK, so you can develop and test the licensing implementation in your
-applications before publishing them, even if you don't have access to a
-physical device.</p>
-
-
-
-
-<h2 id="Reqs">Requirements and Limitations</h2>
-
-<p>Google Play Licensing is designed to let you apply license controls to
-applications that you publish through Google Play. The service is not
-designed to let you control access to applications that are not published
-through Google Play or that are run on devices that do not offer the Google
-Play client. </p>
-
-<p>Here are some points to keep in mind as you implement licensing in your
-application: </p>
-
-<ul>
-<li>An application can use the service only if the Google Play client is
-installed on its host device and the device is running Android 1.5 (API level 3)
-or higher.</li>
-<li>To complete a license check, the licensing server must be accessible over
-the network. You can implement license caching behaviors to manage access to your application when
-there is no network connectivity. </li>
-<li>The security of your application's licensing controls ultimately relies on
-the design of your implementation itself. The service provides the building
-blocks that let you securely check licensing, but the actual enforcement and
-handling of the license are factors are up to you. By following the best
-practices in the following documents, you can help ensure that your implementation will be
-secure.</li>
-<li>Adding licensing to an application does not affect the way the application
-functions when run on a device that does not offer Google Play.</li>
-<li>You can implement licensing controls for a free app, but only if you're using the service to
-provide <a
-href="{@docRoot}guide/google/play/expansion-files.html">APK expansion files</a>.</li>
-</ul>
-
-
-
-<h2 id="CopyProtection">Replacement for Copy Protection</h2>
-
-<p>Google Play Licensing is a flexible, secure mechanism for controlling
-access to your applications. It effectively replaces the Copy Protection
-mechanism offered on Google Play and gives you wider distribution
-potential for your applications. </p>
-
-<ul>
-<li>A limitation of the legacy Copy Protection mechanism on Google Play is
-that applications using it can be installed only on compatible devices that
-provide a secure internal storage environment. For example, a copy-protected
-application cannot be downloaded from Google Play to a device that provides root
-access, and the application cannot be installed to a device's SD card. </li>
-<li>With Google Play licensing, you can move to a license-based model in
-which access is not bound to the characteristics of the host device, but to your
-publisher account on Google Play and the licensing policy that you define.
-Your application can be installed and controlled on any compatible device on
-any storage, including SD card.</li>
-</ul>
-
-<p>Although no license mechanism can completely prevent all unauthorized use,
-the licensing service lets you control access for most types of normal usage,
-across all compatible devices, locked or unlocked, that run Android 1.5 or
-higher version of the platform.</p>
-
-<p>To begin adding application licensing to your application, continue to <a
-href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>.</p>
-
-
-
-
-
-
diff --git a/docs/html/guide/google/play/licensing/setting-up.jd b/docs/html/guide/google/play/licensing/setting-up.jd
deleted file mode 100644
index 80a4419..0000000
--- a/docs/html/guide/google/play/licensing/setting-up.jd
+++ /dev/null
@@ -1,701 +0,0 @@
-page.title=Setting Up for Licensing
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>In this document</h2>
- <ol>
- <li><a href="#account">Setting Up a Publisher Account</a></li>
- <li><a href="#dev-setup">Setting Up the Development Environment</a>
- <ol>
- <li><a href="#runtime-setup">Setting up the runtime environment</a></li>
- <li><a href="#download-lvl">Downloading the LVL</a></li>
- <li><a href="#lvl-setup">Setting Up the Licensing Verification Library</a></li>
- <li><a href="#add-library">Including the LVL library project sources in your
-application</a></li>
- </ol>
- </li>
- <li><a href="#test-env">Setting Up the Testing Environment</a>
- <ol>
- <li><a href="#test-response">Setting test responses for license checks</a></li>
- <li><a href="#test-acct-setup">Setting up test accounts</a></li>
- <li><a href="#acct-signin">Signing in to an authorized account in the runtime
-environment</a></li>
- </ol>
- </li>
-</ol>
-</div>
-</div>
-
-<p>Before you start adding license verification to your application, you need to set up your Google
-Play publishing account, your development environment, and test accounts required to verify
-your implementation.</p>
-
-
-<h2 id="account">Setting Up a Publisher Account</h2>
-
-<p>If you don't already have a publisher account for Google Play, you need to register for one
-using your Google account and agree to the terms of service on the Google Play publisher site:</p>
-
-<p style="margin-left:2em;"><a
-href="http://play.google.com/apps/publish">http://play.google.com/apps/publish</a>
-</p>
-
-<p>For more information, see <a
-href="{@docRoot}distribute/googleplay/publish/register.html">Get Started with Publishing</a>.</p>
-
-<p>If you already have a publisher account on Google Play, use your existing
-account to set up licensing.</p>
-
-<p>Using your publisher account on Google Play, you can:</p>
-
-<ul>
-<li>Obtain a public key for licensing</li>
-<li>Debug and test an application's licensing implementation, prior to
-publishing the application</li>
-<li>Publish the applications to which you have added licensing support</li>
-</ul>
-
-<h4>Administrative settings for licensing</h4>
-
-<p>You can manage several
-administrative controls for Google Play licensing on the publisher site. The controls are available
-in the Edit Profile page, in the "Licensing" panel, shown in figure 1. The controls
-let you: </p>
-
-<ul>
-<li>Set up multiple "test accounts," identified by email address. The licensing
-server allows users signed in to test accounts on a device or emulator to send
-license checks and receive static test responses.</li>
-<li>Obtain the account's public key for licensing. When you are implementing
-licensing in an application, you must copy the public key string into the
-application.</li>
-<li>Configure static test responses that the server sends, when it receives a
-license check for an application uploaded to the publisher account, from a user
-signed in to the publisher account or a test account.</li>
-</ul>
-
-
-<img src="{@docRoot}images/licensing_public_key.png" alt=""/>
-<p class="img-caption"><strong>Figure 1.</strong> The Licensing
-panel of your account's Edit Profile page lets you manage administrative
-settings for licensing.</p>
-
-<p>For more information about how to work with test accounts and static test
-responses, see <a href="#test-env">Setting Up a Testing Environment</a>, below.
-
-
-
-<h2 id="dev-setup">Setting Up the Development Environment</h2>
-
-<p>Setting up your environment for licensing involves these tasks:</p>
-
-<ol>
-<li><a href="#runtime-setup">Setting up the runtime environment</a> for development</li>
-<li><a href="#download-lvl">Downloading the LVL</a> into your SDK </li>
-<li><a href="#lvl-setup">Setting up the Licensing Verification Library</a></li>
-<li><a href="#add-library">Including the LVL library project in your application</a></li>
-</ol>
-
-<p>The sections below describe these tasks. When you are done with setup,
-you can begin <a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
-Licensing to Your App</a>.</p>
-
-<p>To get started, you need to set up a proper runtime environment on which
-you can run, debug, and test your application's implementation of license
-checking and enforcement. </p>
-
-
-<h3 id="runtime-setup">Setting up the runtime environment</h3>
-
-<p>As described earlier, applications check licensing status not by contacting
-the licensing server directly, but by binding to a service provided by the
-Google Play application and initiating a license check request. The Google
-Play service then handles the direct communication with the licensing server
-and finally routes the response back to your application. To debug and test
-licensing in your application, you need to set up a runtime environment that
-includes the necessary Google Play service, so that your application is able
-to send license check requests to the licensing server. </p>
-
-<p>There are two types of runtime environment that you can use: </p>
-
-<ul>
-<li>An Android-powered device that includes the Google Play application, or</li>
-<li>An Android emulator running the Google APIs Add-on, API level 8 (release 2)
-or higher</li>
-</ul>
-
-<h4 id="runtime-device">Running on a device</h4>
-
-<p>To use an Android-powered device for
-debugging and testing licensing, the device must:</p>
-
-<ul>
-<li>Run a compatible version of Android 1.5 or later (API level
-3 or higher) platform, <em>and</em> </li>
-<li>Run a system image on which the Google Play client application
-is preinstalled. </li>
-</ul>
-
-<p>If Google Play is not preinstalled in the system image, your application won't
-be able to communicate with the Google Play licensing server. </p>
-
-<p>For general information about how to set up a device for use in developing
-Android applications, see <a
-href="{@docRoot}tools/device.html">Using Hardware Devices</a>.</p>
-
-<h4 id="runtime-emulator">Running on an Android emulator</h4>
-
-<p>If you don't have a device available, you can use an Android emulator for debugging and testing
-licensing.</p>
-
-<p>Because the Android platforms provided in the Android SDK <em>do
-not</em> include Google Play, you need to download the Google APIs Add-On
-platform, API level 8 (or higher), from the SDK repository. After downloading
-the add-on, you need to create an AVD configuration that uses that system image.
-</p>
-
-<p>The Google APIs Add-On does not include the full Google Play client.
-However, it does provide: </p>
-
-<ul>
-<li>An Google Play background service that implements the
-<code>ILicensingService</code> remote interface, so that your application can
-send license checks over the network to the licensing server. </li>
-<li>A set of underlying account services that let you add an a Google account on
-the AVD and sign in using your publisher account or test account credentials.
-<p>Signing in using your publisher or test account enables you to debug and test
-your application without having publish it. For more information see <a
-href="#acct-signin">Signing in to an authorized account</a>, below.</p></li>
-</ul>
-
-<p>Several versions of the Google APIs add-on are available through the SDK Manager, but only
-the version for Android 2.2 and higher includes the necessary Google
-Play services.</p>
-
-<p>To set up an emulator for adding licensing to an application, follow
-these steps: </p>
-
-<ol>
- <li>Launch the Android SDK Manager (available under the Eclipse <strong>Window</strong>
-menu or by executing {@code &lt;sdk>/tools/android sdk}).</li>
- <li>Select and download <strong>Google APIs</strong> for the Android version you'd like to target
-(must be Android 2.2 or higher).</li>
- <li>When the download is complete, open the AVD Manager (available under the Eclipse
-<strong>Window</strong>
-menu or by executing {@code &lt;sdk>/tools/android avd}).</li>
- <li>Click
-<strong>New</strong> and set the configuration details for the new AVD. </li>
- <li>In the dialog that appears, assign a descriptive name to the AVD and then
-use the Target menu to choose the <strong>Google APIs</strong> as
-the system image to run on the new AVD. Set the other configuration details as
-needed and then click <strong>Create AVD</strong> to finish. The SDK tools
-create the new AVD configuration, which then appears in the list of available
-Android Virtual Devices.</li>
-</ol>
-
-<p>If you are not familiar with AVDs or how to use them, see <a
-href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.</p>
-
-<h4 id="project-update">Updating your project configuration</h4>
-
-<p>After you set up a runtime environment that meets the requirements described
-above &mdash; either on an actual device or on an emulator &mdash; make sure to
-update your application project or build scripts as needed, so that your compiled
-<code>.apk</code> files that use licensing are deployed into that environment.
-In particular, if you are developing in Eclipse, make sure that you set up a
-Run/Debug Configuration that targets the appropriate device or AVD. </p>
-
-<p>You do not need to make any changes to your application's
-build configuration, provided that the project is already configured to compile
-against a standard Android 1.5 (API level 3) or higher library. For example:
-
-<ul>
-<li>If you have an existing application that is compiled against
-the Android 1.5 library, you do not need to make any changes to your
-build configuration to support licensing. The build target meets the minimum
-requirements for licensing, so you would continue building
-against the same version of the Android platform.</li>
-
-<li>Similarly, if you are building against Android 1.5 (API level 3) but
-are using an emulator running the Google APIs Add-On API 8 as the application's
-runtime environment, there is no need to change your application's build
-configuration. </li>
-</ul>
-
-<p>In general, adding licensing to an application should have no impact
-whatsoever on the application's build configuration.</p>
-
-
-<h3 id="download-lvl">Downloading the LVL</h3>
-
-<p>The License Verification Library (LVL) is a collection of helper classes that
-greatly simplify the work that you need to do to add licensing to your
-application. In all cases, we recommend that you download the LVL and use it as
-the basis for the licensing implementation in your application.</p>
-
-<p>The LVL is available as a downloadable package of the Android SDK. The
-package includes: </p>
-
-<ul>
-<li>The LVL sources, stored inside an Android library project. </li>
-<li>An example application called "sample" that depends on the LVL library
-project. The example illustrates how an application uses the library helper
-classes to check and enforce licensing.</li>
-</ul>
-
-<p>To download the LVL package into your development environment, use the
-Android SDK Manager. Launch the Android SDK Manager and then
-select the <strong>Google Market Licensing</strong> package, as shown in figure 2.
-Accept the terms and click <strong>Install Selected</strong> to begin the download. </p>
-
-<img src="{@docRoot}images/licensing_package.png" alt=""/>
-<p class="img-caption"><strong>Figure 2.</strong> The Licensing package contains the LVL and
-the LVL sample application.</p>
-
-<p>When the download is complete, the Android SDK Manager installs both
-the LVL library project and the example application into these directories: </p>
-
-<p style="margin-left:2em"><code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/library/</code>
-&nbsp;&nbsp;(the LVL library project)<br />
-<code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/sample/</code>&nbsp;&nbsp;(the example
-application)</p>
-
-<p>If you aren't familiar with how to download packess into your SDK, see the
-<a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>
-document. </p>
-
-
-<h3 id="lvl-setup">Setting Up the Licensing Verification Library</h3>
-
-<p>After downloading the LVL to your computer, you need to set it up in your
-development environment, either as an Android library project or by
-copying (or importing) the library sources directly into your existing
-application package. In general, using the LVL as a library project is recommended,
-since it lets you reuse your licensing code across multiple applications and
-maintain it more easily over time. Note that the LVL is not designed to be
-compiled separately and added to an application as a static .jar file. </p>
-
-<h4>Moving the library sources to a new location</h4>
-
-<p>Because you will be customizing the LVL sources to some extent, you should
-make sure to <em>move or copy</em> the library sources (the entire
-directory at <code>&lt;<em>sdk</em>&gt;/market_licensing/library/</code>)
-to a working directory outside of the SDK. You should then use the relocated
-sources as your working set. If you are using a source-code management
-system, add and track the sources that are in the working location rather
-than those in default location in the SDK. </p>
-
-<p>Moving the library sources is important is because, when you later update the
-Licensing package, the SDK installs the new files to the same location as
-the older files. Moving your working library files to a safe location ensures
-that your work won't be inadvertently overwritten should you download a new
-version of the LVL.</p>
-
-<h4>Creating the LVL as a library project</h4>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Working with library projects</h2>
-
-<p>The LVL is provided as an Android library project, which means that you can
-share its code and resources across multiple applications. </p>
-
-<p style="margin-top:.5em;">If you aren't familiar with library projects or how
-to use them, see <a href="{@docRoot}tools/projects/index.html#LibraryProjects">
-Managing Projects</a>.
-</p>
-</div>
-</div>
-
-<p>The recommended way of using the LVL is setting it up as a new Android
-<em>library project</em>. A library project is a type of development project
-that holds shared Android source code and resources. Other Android application
-projects can reference the library project and, at build time, include its
-compiled sources in their <code>.apk</code> files. In the context of licensing,
-this means that you can do most of your licensing development once, in a library
-project, then include the library sources in your various application projects.
-In this way, you can easily maintain a uniform implementation of licensing
-across all of your projects and maintain it centrally. </p>
-
-<p>The LVL is provided as a configured library project &mdash; once you have
-downloaded it, you can start using it right away. </p>
-
-<p>If you are working in Eclipse with ADT, you need to add the LVL to your
-workspace as a new development project, in the same way as you would a new
-application project. </p>
-
-<ol>
-<li>Use the New Project Wizard to create a new
-project from existing sources. Select the LVL's <code>library</code> directory
-(the directory containing the library's AndroidManifest.xml file) as the project
-root.</li>
-<li>When you are creating the library project, you can select any application
-name, package, and set other fields as needed. </li>
-<li>For the library's build target, select Android 1.5 (API level 3) or higher.</li>
-</ol>
-
-<p> When created, the project is
-predefined as a library project in its <code>project.properties</code> file, so
-no further configuration is needed. </p>
-
-<p>For more information about how to create an application project or work with
-library projects in Eclipse, see <a
-href="{@docRoot}tools/projects/projects-eclipse.html">Managing Projects from
-Eclipse with ADT</a>.</p>
-
-
-<h4>Copying the LVL sources to your application</h4>
-
-<p>As an alternative to adding the LVL as a library project, you can copy the
-library sources directly into your application. To do so, copy (or import) the
-LVL's <code>library/src/com</code> directory into your application's
-<code>src/</code> directory.</p>
-
-<p>If you add the LVL sources directly to your application, you can skip the
-next section and start working with the library, as described in <a
-href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
-Licensing to Your App</a>.</p>
-
-
-<h3 id="add-library">Including the LVL library project sources in your
-application</h3>
-
-<p>If you want to use the LVL sources as a library project, you need to add a
-reference to the LVL library project in your application project properties. This tells
-build tools to include the LVL library project sources in your application at
-compile time. The process for adding a reference to a library project depends
-on your development environment, as described below.</p>
-
-<p> If you are developing in Eclipse with ADT, you should already have added the
-library project to your workspace, as described in the previous section. If you
-haven't done that already, do it now before continuing. </p>
-
-<p>Next, open the application's project properties window, as shown below.
-Select the "Android" properties group and click <strong>Add</strong>, then
-choose the LVL library project (com_android_vending_licensing) and click
-<strong>OK</strong>. For more information, see
-<a href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">
-Managing Projects from Eclipse with ADT</a></p>.
-
-
-<img src="{@docRoot}images/licensing_add_library.png" alt=""/>
-<p class="img-caption"><strong>Figure 3.</strong> If you are
-working in Eclipse with ADT, you can add the LVL library project to your
-application from the application's project properties.</p>
-
-
-<p>If you are developing using the SDK command-line tools, navigate to the
-directory containing your application project and open the
-<code>project.properties</code> file. Add a line to the file that specifies the
-<code>android.library.reference.&lt;n&gt;</code> key and the path to the
-library. For example: </p>
-
-<pre>android.library.reference.1=path/to/library_project</pre>
-
-<p>Alternatively, you can use this command to update the project
-properties, including the reference to the library project:</p>
-
-<pre class="no-pretty-print" style="color:black">android update lib-project
---target <em>&lt;target_ID&gt;</em> \
---path <em>path/to/my/app_project</em> \
---library <em>path/to/my/library_project</em>
-</pre>
-
-<p>For more information about working with library projects,
-see <a href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">
-Setting up a Library Project</a>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h2 id="test-env">Setting Up the Testing Environment</h2>
-
-<p>The Google Play publisher site provides configuration tools that let you
-and others test licensing on your application before it is published. As you are
-implementing licensing, you can make use of the publisher site tools to test
-your application's Policy and handling of different licensing responses and
-error conditions.</p>
-
-<p>The main components of the test environment for licensing include: </p>
-
-<ul>
-<li>A "Test response" configuration in your publisher account that lets you
-set the static licensing response returned, when the server processes a
-license check for an application uploaded to the publisher account, from a user
-signed in to the publisher account or a test account.</li>
-<li>An optional set of test accounts that will receive the static test
-response when they check the license of an application that you have uploaded
-(regardless whether the application is published or not).</li>
-<li>A runtime environment for the application that includes the Google Play
-application or Google APIs Add-On, on which the user is signed in to the
-publisher account or one of the test accounts.</li>
-</ul>
-
-<p>Setting up the test environment properly involves:</p>
-
-<ol>
-<li><a href="#test-response">Setting static test responses</a> that are returned by the licensing server.</li>
-<li><a href="#test-acct-setup">Setting up test accounts</a> as needed.</li>
-<li><a href="#acct-signin">Signing in</a> properly to an emulator or device, before initiating a license check test.</li>
-</ol>
-
-<p>The sections below provide more information.</p>
-
-
-<h3 id="test-response">Setting test responses for license checks</h3>
-
-<p>Google Play provides a configuration setting in your publisher account
-that lets you override the normal processing of a license check and return a
-specified static response code. The setting is for testing only and applies
-<em>only</em> to license checks for applications that you have uploaded, made by
-any user signed in to an emulator or device using the credentials of the
-publisher account or a registered test account. For other users, the server
-always processes license checks according to normal rules. </p>
-
-<p>To set a test response for your account, sign in to your publisher account
-and click "Edit Profile". In the Edit Profile page, locate the Test Response
-menu in the Licensing panel, shown below. You can select from the full set of
-valid server response codes to control the response or condition you want to
-test in your application.</p>
-
-<p>In general, you should make sure to test your application's licensing
-implementation with every response code available in the Test Response menu.
-For a description of the codes, see <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> in the <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>.</p>
-
-<img src="{@docRoot}images/licensing_test_response.png" alt=""/>
-<p class="img-caption"><strong>Figure 4.</strong> The Licensing
-panel of your account's Edit Profile page, showing the Test Accounts field and the
-Test Response menu.</p>
-
-<p>Note that the test response that you configure applies account-wide &mdash;
-that is, it applies not to a single application, but to <em>all</em>
-applications associated with the publisher account. If you are testing multiple
-applications at once, changing the test response will affect all of those
-applications on their next license check (if the user is signed in to
-the emulator or device using the publisher account or a test account).</p>
-
-<p>Before you can successfully receive a test response for a license check,
-you must sign in to the device or emulator on which the application
-is installed, and from which it is querying the server. Specifically, you must
-sign using either your publisher account or one of the test accounts that you
-have set up. For more information about test accounts, see the next section.</p>
-
-<p>See <a
-href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> for a list of
-test responses available and their meanings. </p>
-
-
-<h3 id="test-acct-setup">Setting up test accounts</h3>
-
-<p>In some cases, you might want to let multiple teams of developers test
-licensing on applications that will ultimately be published through your
-publisher account, but without giving them access to your publisher account's
-sign-in credentials. To meet that need, the Google Play publisher site lets
-you set up one or more optional <em>test accounts</em> &mdash; accounts that are
-authorized to query the licensing server and receive static test responses from
-your publisher account.</p>
-
-<p>Test accounts are standard Google accounts that you register on your
-publisher account, such that they will receive the test response for
-applications that you have uploaded. Developers can then sign in to their
-devices or emulators using the test account credentials and initiate license
-checks from installed applications. When the licensing server receives a license
-check from a user of a test account, it returns the static test response
-configured for the publisher account. </p>
-
-<p>Necessarily, there are limitations on the access and permissions given to
-users signed in through test accounts, including:</p>
-
-<ul>
-<li>Test account users can query the licensing server only for applications that
-are already uploaded to the publisher account. </li>
-<li>Test account users do not have permission to upload applications to your
-publisher account.</li>
-<li>Test account users do not have permission to set the publisher account's
-static test response.</li>
-</ul>
-
-<p>The table below summarizes the differences in capabilities, between the
-publisher account, a test account, and any other account.</p>
-
-<p class="table-caption" id="acct-types-table"><strong>Table 1.</strong>
-Differences in account types for testing licensing.</p>
-
-<table>
-<tr>
-<th>Account Type</th>
-<th>Can check license before upload?</th>
-<th>Can receive test response?</th>
-<th>Can set test response?</th>
-</tr>
-
-<tr>
-<td>Publisher account</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-
-<tr>
-<td>Test account</td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-</tr>
-
-<tr>
-<td>Other</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-</tr>
-</table>
-
-<h4 id="reg-test-acct">Registering test accounts on the publisher account</h4>
-
-<p>To get started, you need to register each test account in your publisher
-account. As shown in Figure 4, you
-register test accounts in the Licensing panel of your publisher account's Edit
-Profile page. Simply enter the accounts as a comma-delimited list and click
-<strong>Save</strong> to save your profile changes.</p>
-
-<p>You can use any Google account as a test account. If you want to own and
-control the test accounts, you can create the accounts yourself and distribute
-the credentials to your developers or testers.</p>
-
-<h4 id="test-app-upload">Handling application upload and distribution for test
-account users</h4>
-
-<p>As mentioned above, users of test accounts can only receive static test
-responses for applications that are uploaded to the publisher account. Since
-those users do not have permission to upload applications, as the publisher you
-will need to work with those users to collect apps for upload and distribute
-uploaded apps for testing. You can handle collection and distribution in any way
-that is convenient. </p>
-
-<p>Once an application is uploaded and becomes known to the licensing server,
-developers and testers can continue modify the application in their local
-development environment, without having to upload new versions. You only need to
-upload a new version if the local application increments the
-<code>versionCode</code> attribute in the manifest file. </p>
-
-<h4 id="test-key">Distributing your public key to test account users</h4>
-
-<p>The licensing server handles static test responses in the normal way,
-including signing the license response data, adding extras parameters, and so
-on. To support developers who are implementing licensing using test accounts,
-rather than the publisher account, you will need to distribute
-your public key to them. Developers without access to the publisher site do not
-have access to your public key, and without the key they won't be able to
-verify license responses. </p>
-
-<p>Note that if you decide to generate a new licensing key pair for your account
-for some reason, you need to notify all users of test accounts. For
-testers, you can embed the new key in the application package and distribute it
-to users. For developers, you will need to distribute the new key to them
-directly. </p>
-
-
-<h3 id="acct-signin">Signing in to an authorized account in the runtime
-environment</h3>
-
-<p>The licensing service is designed to determine whether a given user is
-licensed to use a given application &mdash; during a license check, the Google
-Play application gathers the user ID from the primary account on the system
-and sends it to the server, together with the package name of the application
-and other information. However, if there is no user information available, the
-license check cannot succeed, so the Google Play application terminates the
-request and returns an error to the application. </p>
-
-<p>During testing, to ensure that your application can successfully query the
-licensing server, you must make sure that you sign in to an account <em>on the
-device or emulator</em> using:</p>
-
-<ul>
-<li>The credentials of a publisher account, or</li>
-<li>The credentials of a test account that is registered with a publisher
-account</li>
-</ul>
-
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Signing in to a Google account on an emulator</h2>
-
-<p>If you are testing licensing on an emulator, you need to sign in to a Google
-account on the emulator. If you do not see an option to create a new Google
-account, the problem might be that your AVD is running a standard Android system
-image, rather than the Google APIs Add-On, API 8 (release 2) or higher. </p>
-
-<p style="margin-top:.5em;">For more information, see <a
-href="#runtime-setup">Setting up the runtime environment</a>, above.</p>
-
-</div>
-</div>
-
-<p>Signing in using a publisher account offers the advantage of letting your
-applications receive static test responses even before the applications are
-uploaded to the publisher site.</p>
-
-<p>If you are part of a larger organization or are working with external groups
-on applications that will be published through your site, you will more likely
-want to distribute test accounts instead, then use those to sign in during
-testing. </p>
-
-<p>To sign in on a device or emulator, follow the steps below. The preferred
-approach is to sign in as the primary account &mdash; however, if there are
-other accounts already in use on the device or emulator, you can create an
-additional account and sign in to it using the publisher or test account
-credentials. </p>
-
-<ol>
-<li>Open Settings &gt; Accounts &amp; sync</li>
-<li>Select <strong>Add Account</strong> and choose to add a Google account.
-</li>
-<li>Select <strong>Next</strong> and then <strong>Sign in</strong>.</li>
-<li>Enter the username and password of either the publisher account or a test
-account that is registered in the publisher account.</li>
-<li>Select <strong>Sign in</strong>. The system signs you in to the new
-account.</li>
-</ol>
-
-<p>Once you are signed in, you can begin testing licensing in your application
-(if you have completed the LVL integration steps above). When your application
-initiates a license check, it will receive a response containing the static test
-response configured on the publisher account. </p>
-
-<p>Note that, if you are using an emulator, you will need to sign in to the
-publisher account or test account each time you wipe data when restarting the
-emulator.</p>
-
-<p>Once you've completed the setup procedures, continue to <a
-href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>.</p>
-
-
-
diff --git a/docs/html/guide/google/play/publishing/multiple-apks.jd b/docs/html/guide/google/play/publishing/multiple-apks.jd
deleted file mode 100644
index 0619dfc..0000000
--- a/docs/html/guide/google/play/publishing/multiple-apks.jd
+++ /dev/null
@@ -1,685 +0,0 @@
-page.title=Multiple APK Support
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
- <h2>Quickview</h2>
- <ul>
- <li>Simultaneously publish different APKs for different
-device configurations</li>
- <li>You should publish multiple APKs only when it's not possible to
-support all desired devices with a single APK</li>
- </ul>
-
- <h2>In this document</h2>
-<ol>
- <li><a href="#Concepts">Publishing Concepts</a>
- <ol>
- <li><a href="#Active">Active APKs</a></li>
- <li><a href="#SimpleAndAdvanced">Simple mode and advanced mode</a></li>
- </ol>
- </li>
- <li><a href="#HowItWorks">How Multiple APKs Work</a>
- <ol>
- <li><a href="#SupportedFilters">Supported filters</a></li>
- <li><a href="#Rules">Rules for multiple APKs</a></li>
- </ol>
- </li>
- <li><a href="#CreatingApks">Creating Multiple APKs</a>
- <ol>
- <li><a href="#VersionCodes">Assigning version codes</a></li>
- </ol>
- </li>
- <li><a href="#SingleAPK">Using a Single APK Instead</a>
- <ol>
- <li><a href="#TextureOptions">Supporting multiple GL textures</a></li>
- <li><a href="#ScreenOptions">Supporting multiple screens</a></li>
- <li><a href="#ApiLevelOptions">Supporting multiple API levels</a></li>
- <li><a href="#CpuArchOptions">Supporting multiple CPU architectures</a></li>
- </ol>
- </li>
-</ol>
-
- <h2>See also</h2>
-<ol>
- <li><a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a></li>
- <li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
- <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
- <li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a></li>
- <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Multiple APK support is a feature on Google Play that allows you to publish different APKs
-for your application that are each targeted to different device configurations. Each APK is a
-complete and independent version of your application, but they share the same application listing on
-Google Play and must share the same package name and be signed with the same release key. This
-feature is useful for cases in which your application cannot reach all desired devices with a single
-APK.</p>
-
-<p>Android-powered devices may differ in several ways and it's important
-to the success of your application that you make it available to as many devices as possible.
-Android applications usually run on most compatible devices with a single APK, by supplying
-alternative resources for different configurations (for example, different layouts for different
-screen sizes) and the Android system selects the appropriate resources for the device at runtime. In
-a few cases, however, a single APK is unable to support all device configurations, because
-alternative resources make the APK file too big (greater than 50MB) or other technical challenges
-prevent a single APK from working on all devices.</p>
-
-<p>Although <strong>we encourage you to develop and publish a single APK</strong> that supports as
-many device configurations as possible, doing so is sometimes not possible. To help
-you publish your application for as many devices as possible, Google Play allows you to
-publish multiple APKs under the same application listing. Google Play then supplies each APK to
-the appropriate devices based on configuration support you've declared in the manifest file of each
-APK. </p>
-
-<p>By publishing your application with multiple APKs, you can:</p>
-
-<ul>
- <li>Support different OpenGL texture compression formats with each APK.</li>
- <li>Support different screen sizes and densities with each APK.</li>
- <li>Support different platform versions with each APK.</li>
- <li>Support different CPU architectures with each APK (such as for ARM, x86, and MIPS, when your
- app uses the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>).</li>
-</ul>
-
-<p>Currently, these are the only device characteristics that Google Play supports for publishing
-multiple APKs as the same application.</p>
-
-<p class="note"><strong>Note:</strong> You should generally use multiple APKs to support
-different device configurations <strong>only when your APK is too large</strong> (greater than
-50MB) due to the alternative resources needed for different device configurations.
-Using a single APK to support different configurations is always the best practice,
-because it makes the path for application updates simple and clear for users (and also makes
-your life simpler by avoiding development and publishing complexity). Read the section below about
-<a href="#SingleAPK">Using a Single APK Instead</a> to
-consider your options before publishing multiple APKs.</p>
-
-
-<h2 id="Concepts">Publishing Concepts</h2>
-
-<p>Before you start publishing multiple APKs on Google Play, you must understand a few
-concepts regarding how the Google Play publisher site works.</p>
-
-<h3 id="Active">Active APKs</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
- <h4>The difference between "Publish" and "Save"</h4>
- <p>When editing your application, there are two buttons on the top-right side of the page. The
-first button is either <strong>Publish</strong> or <strong>Unpublish</strong> and the second
-button is always <strong>Save</strong> (but its behavior changes).</p>
- <p>When your application is new or you have unpublished it from Google Play, the first
-button says <strong>Publish</strong>. Clicking it will publish any APKs listed as
-Active, making them available on Google Play. Also while your application is new
-or unpublished, clicking <strong>Save</strong> will save any changes you've made, such
-as information added to the Product details and APKs you've uploaded, but nothing is made visible on
-Google Play&mdash;this allows you to save your changes and sign out of the publisher site before
-deciding to publish.</p>
- <p>Once you've published your application, the first button changes to
-<strong>Unpublish</strong>. Clicking it in this state unpublishes your application so that none
-of the APKs are available on Google Play. Also while published, the behavior of the
-<strong>Save</strong> button is different. In this state, clicking <strong>Save</strong> not
-only saves all your changes, but also publishes them to Google Play. For example, if you've
-already published your application and then make changes to your product details or activate new
-APKs, clicking <strong>Save</strong> makes all those changes live on Google Play.</p>
-</div>
-</div>
-
-
-<p>Before you can publish your application (whether publishing one or multiple APKs), you
-must "activate" your APK(s) from the <strong>APK files</strong> tab. When you activate an APK, it
-moves into the list of <em>Active</em> APKs. This list allows you to preview which APK(s)
-you're about to publish.</p>
-
-<p>If there are no errors, any "active" APK will be published to
-Google Play when you click the <strong>Publish</strong> button (if the application is
-unpublished) or when you click the <strong>Save</strong> button (if the application is
-already published).</p>
-
-
-<h3 id="SimpleAndAdvanced">Simple mode and advanced mode</h3>
-
-<p>The Google Play publisher site provides two modes for managing the APKs associated with
-your application: <em>simple mode</em> and <em>advanced mode</em>. You can switch between these by
-clicking the
-link at the top-right corner of the <strong>APK files</strong> tab.</p>
-
-<p>Simple mode is the traditional way to publish an application, using one APK at a time. In
-simple mode, only one APK can be activated at a time. If you upload a new APK to update
-the application, clicking "Activate" on the new APK deactivates the currently
-active APK (you must then click <strong>Save</strong> to publish the new APK).</p>
-
-<p>Advanced mode allows you to activate and publish multiple APKs that are each designed for a
-specific set of device configurations. However, there are several rules based on the manifest
-declarations in each APK that determine whether you're allowed to activate each APK along with
-others. When you activate an APK and it violates one of the rules, you will receive an error or
-warning message. If it's an error, you cannot publish until you resolve the problem; if it's a
-warning, you can publish the activated APKs, but there might be unintended consequences as to
-whether your application is available for different devices. These rules are discussed more
-below.</p>
-
-
-<h2 id="HowItWorks">How Multiple APKs Work</h2>
-
-<p>The concept for using multiple APKs on Google Play is that you have just one entry in
-Google Play for your application, but different devices might download a different APK. This
-means that:</p>
-
-<ul>
- <li>You maintain only one set of product details (app description, icons, screenshots, etc.).
-This also means you <em>cannot</em> charge a different price for different APKs.</li>
- <li>All users see only one version of your application on Google Play, so they are not
-confused by different versions you may have published that are "for tablets" or
-"for phones."</li>
- <li>All user reviews are applied to the same application listing, even though users on different
-devices may have different APKs.</li>
- <li>If you publish different APKs for different versions of Android (for different API levels),
-then when a user's device receives a system update that qualifies them for a different APK you've
-published, Google Play updates the user's application to the APK designed for the higher version
-of Android. Any system data associated with the application is retained (the same as with normal
-application updates when using a single APK).</li>
-</ul>
-
-<p>To publish multiple APKs for the same application, you must enable <strong>Advanced mode</strong>
-in your application's <strong>APK files</strong> tab (as discussed in the previous section). Once
-in advanced mode, you can upload, activate, then publish multiple APKs for the same application. The
-following sections describe more about how it works.</p>
-
-
-<h3 id="SupportedFilters">Supported filters</h3>
-
-<p>Which devices receive each APK is determined by <a
-href="{@docRoot}guide/google/play/filters.html">Google Play filters</a> that are specified by
-elements in the manifest file of each APK. However, Google Play allows you to publish multiple
-APKs only when each APK uses filters to support a variation of the following
-device characteristics:</p>
-
-<ul>
- <li><strong>OpenGL texture compression formats</strong>
- <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a> element(s).</p>
- <p>For example, when developing a game that uses OpenGL ES, you can provide one APK for
-devices that support ATI texture compression and a separate APK for devices
-that support PowerVR compression (among many others).</p>
- <br/>
- </li>
-
- <li><strong>Screen size (and, optionally, screen density)</strong>
- <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> <em>or</em> <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> element. You should never use both elements and you should use only
-<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> when possible.</p>
- <p>For example, you can provide one APK that supports small and normal size screens and another
-APK that supports large and xlarge screens.</p>
-
- <p class="note"><strong>Note:</strong> The Android system provides strong support for
-applications to support all screen configurations with a single APK. You should avoid creating
-multiple APKs to support different screens unless absolutely necessary and instead follow the guide
-to <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a> so that your application is flexible and can adapt to all screen configurations
-with a single APK.</p>
- <p class="caution"><strong>Caution:</strong> By default, all screen size attributes in the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> element are "true" if you do not declare them otherwise. However,
-because the {@code android:xlargeScreens} attribute was added in Android 2.3 (API level
-9), Google Play will assume that it is "false" if your application does not set either <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> or <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> to "9" or higher.</p>
- <p class="caution"><strong>Caution:</strong> You should not combine both <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> and <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> elements in your manifest file. Using both increases the chances
-that you'll introduce an error due to conflicts between them. For help deciding which to use, read
-<a href="{@docRoot}guide/practices/screens-distribution.html">Distributing to Specific Screens</a>.
-If you can't avoid using both, be aware that for any conflicts in agreement between a given size,
-"false" will win.</p>
- <br/>
- </li>
-
- <li><strong>API level</strong>
- <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> element.
-You
-can use both the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> and <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code android:maxSdkVersion}</a>
-attributes to specify support for different API levels.</p>
- <p>For example, you can publish your application with one APK that supports API levels 4 - 7
-(Android 1.6 - 2.1)&mdash;using only APIs available since API level 4 or lower&mdash;and another
-APK that supports API levels 8 and above (Android 2.2+)&mdash;using APIs available since API level 8
-or lower.</p>
- <div class="note">
- <p><strong>Note:</strong></p>
- <ul>
- <li>If you use this characteristic as the factor to distinguish multiple APKs, then the APK
-with a higher <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> value must have a higher <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
-value. This is also true if two APKs overlap their device support based on a different supported
-filter. This ensures that when a device receives a system update, Google Play can offer the user
-an update for your application (because updates are based on an increase in the app version code).
-This requirement is described further in the section below about <a href="#Rules">Rules for
-multiple APKs</a>.</li>
- <li>You should avoid using <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code
-android:maxSdkVersion}</a> in general, because as long as you've properly developed your
-application with public APIs, it is always compatible with future versions of Android. If you want
-to publish a different APK for higher API levels, you still do not need to specify the
-maximum version, because if the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> is {@code "4"} in one APK and {@code "8"} in another, devices that
-support API level 8 or higher will always receive the second APK (because it's version code is
-higher, as per the previous note).</li>
- </ul>
- </div>
- </li>
-
- <li><strong>CPU architecture (ABI)</strong>
- <p>This is based on the native libraries included in each APK (which are
- determined by the architectures you declare in the {@code Application.mk}
- file) when using the Android NDK.</p></li>
-</ul>
-
-<p>Other manifest elements that enable <a
-href="{@docRoot}guide/google/play/filters.html">Google Play filters</a>&mdash;but are not
-listed above&mdash;are still applied for each APK as usual. However, Google Play does not allow
-you to publish separate APKs based on variations of those device characteristics. Thus, you cannot
-publish multiple APKs if the above listed filters are the same for each APK (but the APKs differ
-based on other characteristics in the manifest or APK). For
-example, you cannot provide different APKs that differ purely on the <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
-&lt;uses-configuration&gt;}</a> characteristics.</p>
-
-
-
-<h3 id="Rules">Rules for multiple APKs</h3>
-
-<p>Before you enable advanced mode to publish multiple APKs for your application, you need to
-understand the following rules that define how publishing multiple APKs works:</p>
-
-<ul>
- <li>All APKs you publish for the same application <strong>must have the same package
-name and be signed with the same certificate key</strong>.</li>
-
- <li>Each APK <strong>must have a different version code</strong>, specified by the
-<a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a> attribute.</li>
-
- <li>Each APK <strong>must not exactly match the configuration support of another APK</strong>.
- <p>That is, each APK must declare slightly different support for at least one of
-the <a href="#SupportedFilters">supported Google Play filters</a> (listed above).</p>
- <p>Usually, you will differentiate your APKs based on a specific characteristic (such as the
-supported texture compression formats), and thus, each APK will declare support for different
-devices. However, it's OK to publish multiple APKs that overlap their support slightly. When two
-APKs do overlap (they support some of the same device configurations), a device that falls within
-that overlap range will receive the APK with a higher version code (defined by <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a>).</p></li>
-
- <li>You cannot activate a new APK that has a version code lower than that of the APK it's
-replacing. For example, say you have an active APK for screen sizes small - normal with version code
-0400, then try to replace it with an APK for the same screen sizes with version code 0300. This
-raises an error, because it means users of the previous APK will not be able to update the
-application.</li>
-
- <li>An APK that requires a <strong>higher API level</strong> must have a <strong>higher
-version code</strong>.
- <p>This is true only when either: the APKs differ based <em>only</em> on the
-supported API levels (no other <a href="#SupportedFilters">supported filters</a>
-distinguish the APKs from each other) <em>or</em> when the APKs do use another supported filter, but
-there is an overlap between the APKs within that filter.</p>
- <p>This is important because a user's device receives an application update from
-Google Play only if the version code for the APK on Google Play is higher than the version
-code of the APK currently on the device. This ensures that if a device receives a system update that
-then qualifies it to install the APK for higher API levels, the device receives an application
-update because the version code increases.</p>
-<p class="note"><strong>Note:</strong> The size of the version code increase is irrelevant; it
-simply needs to be larger in the version that supports higher API levels.</p>
- <p>Here are some examples:</p>
- <ul>
- <li>If an APK you've uploaded for API levels 4 and above (Android 1.6+) has a version code of
-{@code 0400}, then an APK for API levels 8 and above (Android 2.2+) must be {@code 0401} or
-greater. In this case, the API level is the only supported filter used, so the version codes
-<strong>must increase</strong> in correlation with the API level support for each APK, so that users
-get an update when they receive a system update.</li>
- <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
-large screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge screens, then
-the version codes <strong>must increase</strong> in correlation with the API levels.
-In this case, the API level filter is used to
-distinguish each APK, but so is the screen size. Because the screen sizes overlap (both APKs
-support large screens), the version codes must still be in order. This ensures that a large screen
-device that receives a system update to API level 8 will receive an update for the second
-APK.</li>
- <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
-normal screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge
-screens, then the version codes <strong>do not need to increase</strong> in correlation with the API
-levels. Because there is no overlap within the screen size filter, there are no devices that
-could potentially move between these two APKs, so there's no need for the version codes to
-increase from the lower API level to the higher API level.</li>
- <li>If you have one APK that's for API level 4 (and above) <em>and</em> ARMv7 CPUs,
-and another APK for API level 8 (and above) <em>and</em> ARMv5TE CPUs,
-then the version codes <strong>must increase</strong> in correlation with the API levels.
-In this case, the API level filter is used to
-distinguish each APK, but so is the CPU architecture. Because an APK with ARMv5TE libraries is
-compatible with devices that have an ARMv7 CPU, the APKs overlap on this characteristic.
-As such, the version code for the APK that supports API level 8 and above must be higher.
-This ensures that a device with an ARMv7 CPU that receives a system update to API level 8
-will receive an update for the second APK that's designed for API level 8.
-However, because this kind of update results in the ARMv7 device using an APK that's not
-fully optimized for that device's CPU, you should provide an
-APK for both the ARMv5TE and the ARMv7 architecture at each API level in order to optimize
-the app performance on each CPU.
-<strong>Note:</strong> This applies <em>only</em> when comparing APKs with the ARMv5TE and
-ARMv7 libraries, and not when comparing other native libraries.</li>
- </ul>
- </li>
-
-</ul>
-
-<p>Failure to abide by the above rules results in an error on the Google Play publisher site
-when you activate your APKs&mdash;you will be unable to publish your application until you
-resolve the error.</p>
-
-<p>There are other conflicts that might occur when you activate your APKs, but which will result
-in warnings rather than errors. Warnings can be caused by the following:</p>
-
-<ul>
- <li>When you modify an APK to "shrink" the support for a device's characteristics and no other
-APKs support the devices that then fall outside the supported range. For example, if an APK
-currently supports small and normal size screens and you change it to support only small screens,
-then you have shrunk the pool of supported devices and some devices will no longer see your
-application on Google Play. You can resolve this by adding another APK that supports normal size
-screens so that all previously-supported devices are still supported.</li>
-
- <li>When there are "overlaps" between two or more APKs. For example, if an APK supports screen
-sizes small, normal, and large, while another APK supports sizes large and xlarge, there is an
-overlap, because both APKs support large screens. If you do not resolve this, then devices that
-qualify for both APKs (large screen devices in the example) will receive whichever APK has the
-highest version code.
- <p class="note"><strong>Note:</strong> If you're creating separate APKs for different CPU
- architectures, be aware that an APK for ARMv5TE will overlap with an APK for ARMv7. That is,
- an APK designed for ARMv5TE is compatible with an ARMv7 device,
-but the reverse is not true (an APK with only the ARMv7 libraries is
-<em>not</em> compatible with an ARMv5TE device).</li>
-</ul>
-
-<p>When such conflicts occur, you will see a warning message, but you can still publish your
-application.</p>
-
-
-
-<h2 id="CreatingApks">Creating Multiple APKs</h2>
-
-<p>Once you decide to publish multiple APKs, you probably need to create separate
-Android projects for each APK you intend to publish so that you can appropriately develop them
-separately. You can do this by simply duplicating your existing project and give it a new name.
-(Alternatively, you might use a build system that can output different resources&mdash;such
-as textures&mdash;based on the build configuration.)</p>
-
-<p class="note"><strong>Tip:</strong> One way to avoid duplicating large portions of your
-application code is to use a <a
-href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>. A library
-project holds shared code and resources, which you can include in your actual application
-projects.</p>
-
-<p>When creating multiple projects for the same application, it's a good practice to identify each
-one with a name that indicates the device restrictions to be placed on the APK, so you can
-easily identify them. For example, "HelloWorld_8" might be a good name for an
-application designed for API level 8 and above.</p>
-
-<p class="note"><strong>Note:</strong> All APKs you publish for the same application
-<strong>must have the same package name and be signed with the same certificate key</strong>. Be
-sure you also understand each of the <a href="#Rules">Rules for multiple APKs</a>.</p>
-
-
-<h3 id="VersionCodes">Assigning version codes</h3>
-
-<p>Each APK for the same application <strong>must have a unique version code</strong>, specified by
-the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a> attribute. You must be careful about assigning version codes when
-publishing multiple APKs, because they must each be different, but in some
-cases, must or should be defined in a specific order, based on the configurations that each APK
-supports.</p>
-
-<h4>Ordering version codes</h4>
-
-<p>An APK that requires a higher API level must usually have a higher version code. For example, if
-you create two APKs to support different API levels, the APK for the higher API levels must have the
-higher version code. This ensures that if a device receives a system update that then qualifies it
-to install the APK for higher API levels, the user receives a notification to update the app. For
-more information about how this requirement applies, see the section above about <a
-href="#Rules">Rules for multiple APKs</a>.</p>
-
-<p>You should also consider how the order of version codes might affect which APK your users
-receive either due to overlap between coverage of different APKs or future changes you might make to
-your APKs.</p>
-
-<p>For example, if you have different APKs based on screen size, such as one for small - normal and
-one for large - xlarge, but foresee a time when you will change the APKs to be one for small and one
-for normal - xlarge, then you should make the version code for the large - xlarge APK be higher.
-That way, a normal size device will receive the appropriate update when you make the change, because
-the version code increases from the existing APK to the new APK that now supports the device. </p>
-
-<p>Also, when creating multiple APKs that differ based on support for different OpenGL texture
-compression formats, be aware that many devices support multiple formats. Because a device
-receives the APK with the highest version code when there is an overlap in coverage between two
-APKs, you should order the version codes among your APKs so that the APK with the
-preferred compression format has the highest version code. For example, you might want to perform
-separate builds for your app using PVRTC, ATITC, and ETC1 compression formats. If you prefer these
-formats in this exact order, then the APK that uses PVRTC should have the highest version code, the
-APK that uses ATITC has a lower version code, and the version with ETC1 has the lowest. Thus, if a
-device supports both PVRTC and ETC1, it receives the APK with PVRTC, because it has the highest
-version code.</p>
-
-
-<h4>Using a version code scheme</h4>
-
-<p>In order to allow different APKs to update their version codes independent of others (for
-example, when you fix a bug in only one APK, so don't need to update all APKs), you should use a
-scheme for your version codes that
-provides sufficient room between each APK so that you can increase the code in one without requiring
-an increase in others. You should also include your actual version name in the code (that is, the
-user visible version assigned to <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code android:versionName}</a>),
-so that it's easy for you to associate the version code and version name.</p>
-
-<p class="note"><strong>Note:</strong> When you increase the version code for an APK, Google
-Play will prompt users of the previous version to update the application. Thus, to avoid
-unnecessary updates, you should not increase the version code for APKs that do not actually
-include changes.</p>
-
-<p>We suggest using a version code with at least 7 digits: integers that represent
-the supported configurations are in the higher order bits, and the version name (from <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
-android:versionName}</a>) is in the lower order bits. For example, when the application version
-name is 3.1.0, version codes for an API level 4
-APK and an API level 11 APK would be something like 0400310 and 1100310, respectively. The first
-two digits are reserved for the API Level (4 and 11, respectively), the middle two digits are for
-either screen sizes or GL texture formats (not used in these examples), and the last three digits
-are for the application's version name (3.1.0). Figure 1 shows two examples that split based on both
-the platform version (API Level) and screen size.</p>
-
-<img src="{@docRoot}images/market/version-codes.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> A suggested scheme for your version codes,
-using the first two digits for the API Level, the second and third digits for the minimum and
-maximum screen size (1 - 4 indicating each of the four sizes) or to denote the texture formats
-and the last three digits for the app version.</p>
-
-<p>This scheme for version codes is just a suggestion for how you should establish a
-pattern that is scalable as your application evolves. In particular, this scheme doesn't
-demonstrate a solution for identifying different texture compression formats. One option might be
-to define your own table that specifies a different integer to each of the different
-compression formats your application supports (for example, 1 might correspond to ETC1 and 2 is
-ATITC, and so on).</p>
-
-<p>You can use any scheme you want, but you should carefully consider how future versions of your
-application will need to increase their version codes and how devices can receive updates when
-either the device configuration changes (for example, due to a system update) or when you modify the
-configuration support for one or several of the APKs.</p>
-
-
-
-
-<h2 id="SingleAPK">Using a Single APK Instead</h2>
-
-<p><strong>Creating multiple APKs for your application is not the normal procedure</strong> for
-publishing an application on Google Play. In most cases, you should be able to publish your
-application to most users with a single APK and we encourage that you do so. When you encounter
-a situation in which using a single APK becomes difficult, you should carefully consider all your
-options before deciding to publish multiple APKs.</p>
-
-<p>First of all, there are a few key benefits to developing a single APK that supports all
-devices:</p>
-
-<ul>
- <li><strong>Publishing and managing your application is easier.</strong>
- <p>With only one APK to worry about at any given time, you're less likely to become confused by
-which APK is what. You also don't have to keep track of multiple version codes for each
-APK&mdash;by using only one APK, you can simply increase the version code with each release and
-be done.</p> </li>
- <li><strong>You need to manage only a single code base.</strong>
- <p>Although you can use a <a
-href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>
-to share code between multiple Android projects, it's still likely that you'll reproduce some code
-across each project and this could become difficult to manage, especially when resolving
-bugs.</p></li>
- <li><strong>Your application can adapt to device configuration changes.</strong>
- <p>By creating a single APK that contains all the resources for each device configuration, your
-application can adapt to configuration changes that occur at runtime. For example, if the user docks
-or otherwise connects a handset device to a larger screen, there's a chance that this will invoke a
-system configuration change to support the larger screen. If you include all resources for different
-screen configurations in the same APK, then your application will load alternative resources and
-optimize the user experience for the new interface.</p>
- </li>
- <li><strong>App restore across devices just works.</strong>
- <p>If a user has enabled data backup on his or her current device and then buys a new device
-that has a different configuration, then when the user's apps are automatically restored during
-setup, the user receives your application and it runs using the resources optimized for that device.
-For example, on a new tablet, the user receives your application and it runs with your
-tablet-optimized resources. This restore
-process does not work across different APKs, because each APK can potentially have different
-permissions that the user has not agreed to, so Google Play may not restore the application at
-all. (If you use multiple APKs, the user receives either the exact same APK if it's compatible or
-nothing at all and must manually download your application to get the APK designed for the new
-device.)</p></li>
-</ul>
-
-<p>The following sections describe some of the other options you should use to support multiple
-device configurations before deciding to publish multiple APKs.</p>
-
-
-
-<h3 id="TextureOptions">Supporting multiple GL textures</h3>
-
-<p>To support multiple types of GL textures with a single APK, your application should query the GL
-texture formats supported on the device and then use the appropriate resources or download
-them from a web server. For example, in order to keep the size of your APK small, you can query the
-device's support for different GL texture formats when the application starts for the first time and
-then download only the textures you need for that device.</p>
-
-<p>For maximum performance and compatibility, your application should use ETC1 textures wherever it
-doesn't impact the visual quality. However, because ETC1 cannot deal with images that have drastic
-chroma changes, such as line art and (most) text, and doesn't support alpha, it may not the best
-format for all textures.</p>
-
-<p>With a single APK, you should try to use ETC1 textures and uncompressed textures whenever
-reasonable, and consider the use of PVRTC, ATITC, or DXTC as a last resort when ETC1 does not
-suffice.</p>
-
-<p>Here's an example query for supported texture compression formats from inside a
-{@link android.opengl.GLSurfaceView.Renderer GLSurfaceView.Renderer}:</p>
-
-<pre>
-public void onSurfaceChanged(GL10 gl, int w, int h) {
- String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
- Log.d("ExampleActivity", extensions);
-}
-</pre>
-
-<p>This returns a string that lists each of the supported compression formats.</p>
-
-
-
-<h3 id="ScreenOptions">Supporting multiple screens</h3>
-
-<p>Unless your APK file exceeds the Google Play size limit of 50MB, supporting multiple screens
-should always be done with a single APK. Since Android 1.6, the Android system manages most of the
-work required for your application to run successfully on a variety of screen sizes and
-densities.</p>
-
-<p>To further optimize your application for different screen sizes and densities, you should provide
-<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
-resources</a> such as bitmap drawables at different resolutions and different layout designs for
-different screen sizes.</p>
-
-<p>For more information about how to support multiple screens with a single APK, read <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
-
-<p>Additionally, you should consider using a support library from the <a
-href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a> so that you can add <a
-href="{@docRoot}guide/components/fragments.html">Fragments</a> to your activity designs
-when running on larger screens such as tablets.</p>
-
-
-
-<h3 id="ApiLevelOptions">Supporting multiple API levels</h3>
-
-<p>If you want to support as many versions of the Android platform as possible, you should use
-only APIs available in the lowest reasonable version. For example, your application may not require
-APIs newer than Android 2.1 (API Level 7), which makes an application available to
-over 95% of Android-powered devices (as indicated by the <a
-href="{@docRoot}about/dashboards/index.html">Platform Versions</a> dashboard).</p>
-
-<p>By using a support library from the <a
-href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a>, you can also use APIs
-from some of the latest versions (such as Android 3.0) while
-still supporting versions as low as Android 1.6. The support library includes APIs for <a
-href="{@docRoot}guide/components/fragments.html">Fragments</a>, <a
-href="{@docRoot}guide/components/loaders.html">Loaders</a>, and more. Using the fragment
-APIs is particularly valuable so that you can optimize your user interface for large devices such as
-tablets.</p>
-
-<p>Alternatively, if you want to use some APIs that are available only in newer versions of Android
-(which your application can still function without), then you should consider using reflection. By
-using reflection, you can check whether the current device supports certain APIs. If the APIs are
-not available, your application can gracefully disable and hide the feature.</p>
-
-<p>Another way to use new APIs only when running on a version that supports them is to check the
-API level of the current device. That is, you can query the value of {@link
-android.os.Build.VERSION#SDK_INT} and create different code paths depending on the API level
-supported by the device. For example:</p>
-
-<pre>
-if (android.os.Build.VERSION.SDK_INT >= 11) {
- // Use APIs supported by API level 11 (Android 3.0) and up
-} else {
- // Do something different to support older versions
-}
-</pre>
-
-
-<h3 id="CpuArchOptions">Supporting multiple CPU architectures</h3>
-
-<p>When using the Android NDK, you can create a single APK that supports multiple CPU architectures
-by declaring each of the desired architectures with the {@code APP_ABI} variable in the
-<code>Application.mk</code> file.</p>
-
-<p>For example, here's an <code>Application.mk</code> file that declares support for three
-different CPU architectures:</p>
-
-<pre>
-APP_ABI := armeabi armeabi-v7a mips
-APP_PLATFORM := android-9
-</pre>
diff --git a/docs/html/guide/google/play/services.jd b/docs/html/guide/google/play/services.jd
deleted file mode 100644
index 092642c..0000000
--- a/docs/html/guide/google/play/services.jd
+++ /dev/null
@@ -1,25 +0,0 @@
-page.title=Google Play Services
-@jd:body
-<p>
- Google Play services is a platform that is delivered through the Google Play Store that
- offers integration with Google products, such as Google+, into Android apps.
- The Google Play services framework consists of a services component
- that runs on the device and a thin client library that you package with your app.
-</p>
-<div class="distribute-features col-13">
-<ul>
- <li style="border-top: 1px solid #F80;"><h5>Easy Authentication</h5>
- Your app can leverage the user's existing Google account on the device without having to go
- through tedious authentication flows. A few clicks from the user and you're set!
- <br/>
- <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
- </li>
- <li style="border-top: 1px solid #F80;"><h5>Google+ Integration</h5>
- Google Play services makes it easy for your app to integrate with Google+ sign-in and the +1
- button.
- <br/>
- <a href="https://developers.google.com/android/google-play-services">Learn more &raquo;</a>
- </li>
-</ul>
-
-</div>
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index d875f47..d7aacbf 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -533,102 +533,6 @@
</ul>
</li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/index.html">
- <span class="en">Google Services</span>
- </a></div>
- <ul>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot?>guide/google/play/billing/index.html">
- <span class="en">In-app Billing</span></a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_best_practices.html">
- <span class="en">Security and Design</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_testing.html">
- <span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_admin.html">
- <span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_reference.html">
- <span class="en">In-app Billing Reference</span></a>
- </li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/play/licensing/index.html">
- <span class="en">Application Licensing</span></a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot?>guide/google/play/licensing/overview.html">
- <span class="en">Licensing Overview</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/licensing/setting-up.html">
- <span class="en">Setting Up for Licensing</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/licensing/adding-licensing.html">
- <span class="en">Adding Licensing to Your App</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/play/licensing/licensing-reference.html">
- <span class="en">Licensing Reference</span></a>
- </li>
- </ul>
- </li>
- <li><a href="<?cs var:toroot ?>guide/google/play/services.html">
- <span class="en">Google Play Services</span></a>
- </li>
- <li><a href="<?cs var:toroot ?>guide/google/play/filters.html">
- <span class="en">Filters on Google Play</span></a>
- </li>
- <li><a href="<?cs var:toroot ?>guide/google/play/publishing/multiple-apks.html">
- <span class="en">Multiple APK Support</span></a>
- </li>
- <li><a href="<?cs var:toroot ?>guide/google/play/expansion-files.html">
- <span class="en">APK Expansion Files</span></a>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot?>guide/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="<?cs var:toroot?>guide/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- </ul>
- </li>
-
- </ul>
- </li><!-- end Google Play -->
-
-
-
<!-- this needs to move
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">