Merge "Update IP2 to use bitmap-backed allocations."
diff --git a/Android.mk b/Android.mk
index 294a2fe..462d6ac 100644
--- a/Android.mk
+++ b/Android.mk
@@ -166,6 +166,7 @@
core/java/android/speech/IRecognitionService.aidl \
core/java/android/speech/tts/ITextToSpeechCallback.aidl \
core/java/android/speech/tts/ITextToSpeechService.aidl \
+ core/java/com/android/internal/app/IAppOpsService.aidl \
core/java/com/android/internal/app/IBatteryStats.aidl \
core/java/com/android/internal/app/IUsageStats.aidl \
core/java/com/android/internal/app/IMediaContainerService.aidl \
diff --git a/api/current.txt b/api/current.txt
index 1eec50e..72e7601 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -13785,12 +13785,18 @@
method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...);
method public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...);
method public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...);
+ field public static final java.lang.String ACTION_ADAPTER_STATE_CHANGED = "android.nfc.action.ADAPTER_STATE_CHANGED";
field public static final java.lang.String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
field public static final java.lang.String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED";
field public static final java.lang.String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
+ field public static final java.lang.String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE";
field public static final java.lang.String EXTRA_ID = "android.nfc.extra.ID";
field public static final java.lang.String EXTRA_NDEF_MESSAGES = "android.nfc.extra.NDEF_MESSAGES";
field public static final java.lang.String EXTRA_TAG = "android.nfc.extra.TAG";
+ field public static final int STATE_OFF = 1; // 0x1
+ field public static final int STATE_ON = 3; // 0x3
+ field public static final int STATE_TURNING_OFF = 4; // 0x4
+ field public static final int STATE_TURNING_ON = 2; // 0x2
}
public static abstract interface NfcAdapter.CreateBeamUrisCallback {
@@ -17360,6 +17366,7 @@
field public static final java.lang.String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate";
field public static final java.lang.String DELETED = "deleted";
field public static final java.lang.String DIRTY = "dirty";
+ field public static final java.lang.String MUTATORS = "mutators";
field public static final java.lang.String _SYNC_ID = "_sync_id";
}
@@ -19394,6 +19401,7 @@
enum_constant public static final android.renderscript.Element.DataKind PIXEL_LA;
enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGB;
enum_constant public static final android.renderscript.Element.DataKind PIXEL_RGBA;
+ enum_constant public static final android.renderscript.Element.DataKind PIXEL_YUV;
enum_constant public static final android.renderscript.Element.DataKind USER;
}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index cbeffc1..3bdadc3 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2539,12 +2539,16 @@
* Activity don't need to deal with feature codes.
*/
public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ CharSequence titleCondensed = item.getTitleCondensed();
+
switch (featureId) {
case Window.FEATURE_OPTIONS_PANEL:
// Put event logging here so it gets called even if subclass
// doesn't call through to superclass's implmeentation of each
// of these methods below
- EventLog.writeEvent(50000, 0, item.getTitleCondensed().toString());
+ if(titleCondensed != null) {
+ EventLog.writeEvent(50000, 0, titleCondensed.toString());
+ }
if (onOptionsItemSelected(item)) {
return true;
}
@@ -2562,7 +2566,9 @@
return false;
case Window.FEATURE_CONTEXT_MENU:
- EventLog.writeEvent(50000, 1, item.getTitleCondensed().toString());
+ if(titleCondensed != null) {
+ EventLog.writeEvent(50000, 1, titleCondensed.toString());
+ }
if (onContextItemSelected(item)) {
return true;
}
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
new file mode 100644
index 0000000..7210df4
--- /dev/null
+++ b/core/java/android/app/AppOpsManager.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.app;
+
+import com.android.internal.app.IAppOpsService;
+
+import android.content.Context;
+import android.os.Process;
+import android.os.RemoteException;
+
+/** @hide */
+public class AppOpsManager {
+ final Context mContext;
+ final IAppOpsService mService;
+
+ public static final int MODE_ALLOWED = 0;
+ public static final int MODE_IGNORED = 1;
+ public static final int MODE_ERRORED = 2;
+
+ public static final int OP_LOCATION = 0;
+ public static final int OP_GPS = 1;
+ public static final int OP_VIBRATE = 2;
+
+ public static String opToString(int op) {
+ switch (op) {
+ case OP_LOCATION: return "LOCATION";
+ case OP_GPS: return "GPS";
+ case OP_VIBRATE: return "VIBRATE";
+ default: return "Unknown(" + op + ")";
+ }
+ }
+
+ public AppOpsManager(Context context, IAppOpsService service) {
+ mContext = context;
+ mService = service;
+ }
+
+ public int noteOp(int op, int uid, String packageName) {
+ try {
+ int mode = mService.noteOperation(op, uid, packageName);
+ if (mode == MODE_ERRORED) {
+ throw new SecurityException("Operation not allowed");
+ }
+ return mode;
+ } catch (RemoteException e) {
+ }
+ return MODE_IGNORED;
+ }
+
+ public int noteOpNoThrow(int op, int uid, String packageName) {
+ try {
+ return mService.noteOperation(op, uid, packageName);
+ } catch (RemoteException e) {
+ }
+ return MODE_IGNORED;
+ }
+
+ public int noteOp(int op) {
+ return noteOp(op, Process.myUid(), mContext.getPackageName());
+ }
+
+ public int startOp(int op, int uid, String packageName) {
+ try {
+ int mode = mService.startOperation(op, uid, packageName);
+ if (mode == MODE_ERRORED) {
+ throw new SecurityException("Operation not allowed");
+ }
+ return mode;
+ } catch (RemoteException e) {
+ }
+ return MODE_IGNORED;
+ }
+
+ public int startOpNoThrow(int op, int uid, String packageName) {
+ try {
+ return mService.startOperation(op, uid, packageName);
+ } catch (RemoteException e) {
+ }
+ return MODE_IGNORED;
+ }
+
+ public int startOp(int op) {
+ return startOp(op, Process.myUid(), mContext.getPackageName());
+ }
+
+ public void finishOp(int op, int uid, String packageName) {
+ try {
+ mService.finishOperation(op, uid, packageName);
+ } catch (RemoteException e) {
+ }
+ }
+
+ public void finishOp(int op) {
+ finishOp(op, Process.myUid(), mContext.getPackageName());
+ }
+}
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 7431765..03d1a3f 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -142,6 +142,21 @@
}
@Override
+ public int getPackageUid(String packageName, int userHandle)
+ throws NameNotFoundException {
+ try {
+ int uid = mPM.getPackageUid(packageName, userHandle);
+ if (uid >= 0) {
+ return uid;
+ }
+ } catch (RemoteException e) {
+ throw new RuntimeException("Package manager has died", e);
+ }
+
+ throw new NameNotFoundException(packageName);
+ }
+
+ @Override
public PermissionInfo getPermissionInfo(String name, int flags)
throws NameNotFoundException {
try {
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index f895ccc..8ef708c 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -47,11 +47,9 @@
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.hardware.ISerialManager;
-import android.hardware.SensorManager;
import android.hardware.SerialManager;
import android.hardware.SystemSensorManager;
import android.hardware.display.DisplayManager;
-import android.hardware.input.IInputManager;
import android.hardware.input.InputManager;
import android.hardware.usb.IUsbManager;
import android.hardware.usb.UsbManager;
@@ -109,6 +107,8 @@
import android.accounts.AccountManager;
import android.accounts.IAccountManager;
import android.app.admin.DevicePolicyManager;
+
+import com.android.internal.app.IAppOpsService;
import com.android.internal.os.IDropBoxManagerService;
import java.io.File;
@@ -499,7 +499,7 @@
registerService(VIBRATOR_SERVICE, new ServiceFetcher() {
public Object createService(ContextImpl ctx) {
- return new SystemVibrator();
+ return new SystemVibrator(ctx);
}});
registerService(WALLPAPER_SERVICE, WALLPAPER_FETCHER);
@@ -530,11 +530,18 @@
}});
registerService(USER_SERVICE, new ServiceFetcher() {
- public Object getService(ContextImpl ctx) {
+ public Object createService(ContextImpl ctx) {
IBinder b = ServiceManager.getService(USER_SERVICE);
IUserManager service = IUserManager.Stub.asInterface(b);
return new UserManager(ctx, service);
}});
+
+ registerService(APP_OPS_SERVICE, new ServiceFetcher() {
+ public Object createService(ContextImpl ctx) {
+ IBinder b = ServiceManager.getService(APP_OPS_SERVICE);
+ IAppOpsService service = IAppOpsService.Stub.asInterface(b);
+ return new AppOpsManager(ctx, service);
+ }});
}
static ContextImpl getImpl(Context context) {
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java
index 6cf4dd0..32e40ee 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -499,7 +499,7 @@
" already exists and is not a directory");
}
} else {
- if (!file.mkdir()) {
+ if (!file.mkdirs()) {
throw new IllegalStateException("Unable to create directory: "+
file.getAbsolutePath());
}
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 5c75aff..2897ee0 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -289,7 +289,7 @@
/**
* Like {@link #getActivity(Context, int, Intent, int)}, but allows an
- * array of Intents to be supplied. The first Intent in the array is
+ * array of Intents to be supplied. The last Intent in the array is
* taken as the primary key for the PendingIntent, like the single Intent
* given to {@link #getActivity(Context, int, Intent, int)}. Upon sending
* the resulting PendingIntent, all of the Intents are started in the same
@@ -335,7 +335,7 @@
/**
* Like {@link #getActivity(Context, int, Intent, int)}, but allows an
- * array of Intents to be supplied. The first Intent in the array is
+ * array of Intents to be supplied. The last Intent in the array is
* taken as the primary key for the PendingIntent, like the single Intent
* given to {@link #getActivity(Context, int, Intent, int)}. Upon sending
* the resulting PendingIntent, all of the Intents are started in the same
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index f9025d9..188c786 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -78,7 +78,7 @@
// So we treat this case as an unhandled exception.
throw ex;
}
- if (DEBUG) Slog.v(TAG, this + " <<< doInBackground (was canceled)");
+ if (DEBUG) Slog.v(TAG, this + " <<< doInBackground (was canceled)", ex);
return null;
}
}
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java
index 23d8f46..c1411b0 100644
--- a/core/java/android/content/ContentProvider.java
+++ b/core/java/android/content/ContentProvider.java
@@ -154,8 +154,8 @@
*
* @param abstractInterface The ContentProvider interface that is to be
* coerced.
- * @return If the IContentProvider is non-null and local, returns its actual
- * ContentProvider instance. Otherwise returns null.
+ * @return If the IContentProvider is non-{@code null} and local, returns its actual
+ * ContentProvider instance. Otherwise returns {@code null}.
* @hide
*/
public static ContentProvider coerceToLocalContentProvider(
@@ -398,7 +398,7 @@
/**
* Retrieves the Context this provider is running in. Only available once
- * {@link #onCreate} has been called -- this will return null in the
+ * {@link #onCreate} has been called -- this will return {@code null} in the
* constructor.
*/
public final Context getContext() {
@@ -570,15 +570,15 @@
* that the implementation should parse and add to a WHERE or HAVING clause, specifying
* that _id value.
* @param projection The list of columns to put into the cursor. If
- * null all columns are included.
+ * {@code null} all columns are included.
* @param selection A selection criteria to apply when filtering rows.
- * If null then all rows are included.
+ * If {@code null} then all rows are included.
* @param selectionArgs You may include ?s in selection, which will be replaced by
* the values from selectionArgs, in order that they appear in the selection.
* The values will be bound as Strings.
* @param sortOrder How the rows in the cursor should be sorted.
- * If null then the provider is free to define the sort order.
- * @return a Cursor or null.
+ * If {@code null} then the provider is free to define the sort order.
+ * @return a Cursor or {@code null}.
*/
public abstract Cursor query(Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder);
@@ -633,18 +633,18 @@
* that the implementation should parse and add to a WHERE or HAVING clause, specifying
* that _id value.
* @param projection The list of columns to put into the cursor. If
- * null all columns are included.
+ * {@code null} all columns are included.
* @param selection A selection criteria to apply when filtering rows.
- * If null then all rows are included.
+ * If {@code null} then all rows are included.
* @param selectionArgs You may include ?s in selection, which will be replaced by
* the values from selectionArgs, in order that they appear in the selection.
* The values will be bound as Strings.
* @param sortOrder How the rows in the cursor should be sorted.
- * If null then the provider is free to define the sort order.
- * @param cancellationSignal A signal to cancel the operation in progress, or null if none.
+ * If {@code null} then the provider is free to define the sort order.
+ * @param cancellationSignal A signal to cancel the operation in progress, or {@code null} if none.
* If the operation is canceled, then {@link OperationCanceledException} will be thrown
* when the query is executed.
- * @return a Cursor or null.
+ * @return a Cursor or {@code null}.
*/
public Cursor query(Uri uri, String[] projection,
String selection, String[] selectionArgs, String sortOrder,
@@ -668,7 +668,7 @@
* to retrieve the MIME type for a URI when dispatching intents.
*
* @param uri the URI to query.
- * @return a MIME type string, or null if there is no type.
+ * @return a MIME type string, or {@code null} if there is no type.
*/
public abstract String getType(Uri uri);
@@ -679,8 +679,9 @@
* This method can be called from multiple threads, as described in
* <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes
* and Threads</a>.
- * @param uri The content:// URI of the insertion request.
+ * @param uri The content:// URI of the insertion request. This must not be {@code null}.
* @param values A set of column_name/value pairs to add to the database.
+ * This must not be {@code null}.
* @return The URI for the newly inserted item.
*/
public abstract Uri insert(Uri uri, ContentValues values);
@@ -697,6 +698,7 @@
*
* @param uri The content:// URI of the insertion request.
* @param values An array of sets of column_name/value pairs to add to the database.
+ * This must not be {@code null}.
* @return The number of values that were inserted.
*/
public int bulkInsert(Uri uri, ContentValues[] values) {
@@ -741,8 +743,8 @@
*
* @param uri The URI to query. This can potentially have a record ID if this
* is an update request for a specific record.
- * @param values A Bundle mapping from column names to new column values (NULL is a
- * valid value).
+ * @param values A set of column_name/value pairs to update in the database.
+ * This must not be {@code null}.
* @param selection An optional filter to match rows to update.
* @return the number of rows affected.
*/
@@ -875,7 +877,7 @@
/**
* Called by a client to determine the types of data streams that this
* content provider supports for the given URI. The default implementation
- * returns null, meaning no types. If your content provider stores data
+ * returns {@code null}, meaning no types. If your content provider stores data
* of a particular type, return that MIME type if it matches the given
* mimeTypeFilter. If it can perform type conversions, return an array
* of all supported MIME types that match mimeTypeFilter.
@@ -883,7 +885,7 @@
* @param uri The data in the content provider being queried.
* @param mimeTypeFilter The type of data the client desires. May be
* a pattern, such as *\/* to retrieve all possible data types.
- * @return Returns null if there are no possible data streams for the
+ * @return Returns {@code null} if there are no possible data streams for the
* given mimeTypeFilter. Otherwise returns an array of all available
* concrete MIME types.
*
@@ -1091,10 +1093,10 @@
* interfaces that are cheaper and/or unnatural for a table-like
* model.
*
- * @param method method name to call. Opaque to framework, but should not be null.
- * @param arg provider-defined String argument. May be null.
- * @param extras provider-defined Bundle argument. May be null.
- * @return provider-defined return value. May be null. Null is also
+ * @param method method name to call. Opaque to framework, but should not be {@code null}.
+ * @param arg provider-defined String argument. May be {@code null}.
+ * @param extras provider-defined Bundle argument. May be {@code null}.
+ * @return provider-defined return value. May be {@code null}, which is also
* the default for providers which don't implement any call methods.
*/
public Bundle call(String method, String arg, Bundle extras) {
diff --git a/core/java/android/content/ContentProviderNative.java b/core/java/android/content/ContentProviderNative.java
index 550a1c9..384ba57 100644
--- a/core/java/android/content/ContentProviderNative.java
+++ b/core/java/android/content/ContentProviderNative.java
@@ -113,13 +113,21 @@
Cursor cursor = query(url, projection, selection, selectionArgs, sortOrder,
cancellationSignal);
if (cursor != null) {
- CursorToBulkCursorAdaptor adaptor = new CursorToBulkCursorAdaptor(
- cursor, observer, getProviderName());
- BulkCursorDescriptor d = adaptor.getBulkCursorDescriptor();
+ try {
+ CursorToBulkCursorAdaptor adaptor = new CursorToBulkCursorAdaptor(
+ cursor, observer, getProviderName());
+ BulkCursorDescriptor d = adaptor.getBulkCursorDescriptor();
+ cursor = null;
- reply.writeNoException();
- reply.writeInt(1);
- d.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ reply.writeNoException();
+ reply.writeInt(1);
+ d.writeToParcel(reply, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ } finally {
+ // Close cursor if an exception was thrown while constructing the adaptor.
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
} else {
reply.writeNoException();
reply.writeInt(0);
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index e34c827..86bf8c2 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -381,6 +381,7 @@
return null;
}
IContentProvider stableProvider = null;
+ Cursor qCursor = null;
try {
long startTime = SystemClock.uptimeMillis();
@@ -390,7 +391,6 @@
remoteCancellationSignal = unstableProvider.createCancellationSignal();
cancellationSignal.setRemote(remoteCancellationSignal);
}
- Cursor qCursor;
try {
qCursor = unstableProvider.query(uri, projection,
selection, selectionArgs, sortOrder, remoteCancellationSignal);
@@ -409,20 +409,26 @@
if (qCursor == null) {
return null;
}
- // force query execution
+
+ // Force query execution. Might fail and throw a runtime exception here.
qCursor.getCount();
long durationMillis = SystemClock.uptimeMillis() - startTime;
maybeLogQueryToEventLog(durationMillis, uri, projection, selection, sortOrder);
- // Wrap the cursor object into CursorWrapperInner object
+
+ // Wrap the cursor object into CursorWrapperInner object.
CursorWrapperInner wrapper = new CursorWrapperInner(qCursor,
stableProvider != null ? stableProvider : acquireProvider(uri));
stableProvider = null;
+ qCursor = null;
return wrapper;
} catch (RemoteException e) {
// Arbitrary and not worth documenting, as Activity
// Manager will kill this process shortly anyway.
return null;
} finally {
+ if (qCursor != null) {
+ qCursor.close();
+ }
if (unstableProvider != null) {
releaseUnstableProvider(unstableProvider);
}
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 257f84e..41d470b 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -64,44 +64,30 @@
*/
public static final int MODE_PRIVATE = 0x0000;
/**
+ * @deprecated Creating world-readable files is very dangerous, and likely
+ * to cause security holes in applications. It is strongly discouraged;
+ * instead, applications should use more formal mechanism for interactions
+ * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
+ * {@link android.app.Service}. There are no guarantees that this
+ * access mode will remain on a file, such as when it goes through a
+ * backup and restore.
* File creation mode: allow all other applications to have read access
* to the created file.
- *
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, world-readable files created within the
- * application's home directory will not be accessible to other applications.
- *
- * @deprecated Creating world-readable files is very dangerous, and likely
- * to cause security holes in applications. It is strongly discouraged;
- * instead, applications should use more formal mechanism for interactions
- * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
- * {@link android.app.Service}. There are no guarantees that this
- * access mode will remain on a file, such as when it goes through a
- * backup and restore.
* @see #MODE_PRIVATE
* @see #MODE_WORLD_WRITEABLE
*/
@Deprecated
public static final int MODE_WORLD_READABLE = 0x0001;
/**
+ * @deprecated Creating world-writable files is very dangerous, and likely
+ * to cause security holes in applications. It is strongly discouraged;
+ * instead, applications should use more formal mechanism for interactions
+ * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
+ * {@link android.app.Service}. There are no guarantees that this
+ * access mode will remain on a file, such as when it goes through a
+ * backup and restore.
* File creation mode: allow all other applications to have write access
* to the created file.
- *
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, world-writable files created within the
- * application's home directory will not be accessible to other applications.
- *
- * @deprecated Creating world-writable files is very dangerous, and likely
- * to cause security holes in applications. It is strongly discouraged;
- * instead, applications should use more formal mechanism for interactions
- * such as {@link ContentProvider}, {@link BroadcastReceiver}, and
- * {@link android.app.Service}. There are no guarantees that this
- * access mode will remain on a file, such as when it goes through a
- * backup and restore.
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
*/
@@ -515,22 +501,18 @@
throws FileNotFoundException;
/**
- * Open a file associated with this Context's application package
+ * Open a private file associated with this Context's application package
* for writing. Creates the file if it doesn't already exist.
*
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, files created with {@code mode}
- * {@link #MODE_WORLD_READABLE} or {@link #MODE_WORLD_WRITEABLE} will not be
- * accessible to other applications.
- *
- * @param name The name of the file to open; can not contain path separators.
+ * @param name The name of the file to open; can not contain path
+ * separators.
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
- * default operation, {@link #MODE_APPEND} to append to an existing file,
- * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
- * permissions.
+ * default operation, {@link #MODE_APPEND} to append to an existing file,
+ * {@link #MODE_WORLD_READABLE} and {@link #MODE_WORLD_WRITEABLE} to control
+ * permissions.
+ *
* @return FileOutputStream Resulting output stream.
+ *
* @see #MODE_APPEND
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
@@ -756,19 +738,14 @@
* application; you can only set the mode of the entire directory, not
* of individual files.
*
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, world-readable / world-writable directories
- * created using this method will not be accessible to other applications.
- *
* @param name Name of the directory to retrieve. This is a directory
- * that is created as part of your application data.
+ * that is created as part of your application data.
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
- * default operation, {@link #MODE_WORLD_READABLE} and
- * {@link #MODE_WORLD_WRITEABLE} to control permissions.
+ * default operation, {@link #MODE_WORLD_READABLE} and
+ * {@link #MODE_WORLD_WRITEABLE} to control permissions.
+ *
* @return Returns a File object for the requested directory. The directory
- * will have been created if it does not already exist.
+ * will have been created if it does not already exist.
*
* @see #openFileOutput(String, int)
*/
@@ -778,13 +755,6 @@
* Open a new private SQLiteDatabase associated with this Context's
* application package. Create the database file if it doesn't exist.
*
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, {@code SQLiteDatabase}s created with {@code mode}
- * {@link #MODE_WORLD_READABLE} or {@link #MODE_WORLD_WRITEABLE} will not be
- * accessible to other applications.
- *
* @param name The name (unique in the application package) of the database.
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
* default operation, {@link #MODE_WORLD_READABLE}
@@ -792,8 +762,10 @@
* Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
* @param factory An optional factory class that is called to instantiate a
* cursor when query is called.
+ *
* @return The contents of a newly created database with the given name.
* @throws android.database.sqlite.SQLiteException if the database file could not be opened.
+ *
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
@@ -810,13 +782,6 @@
* <p>Accepts input param: a concrete instance of {@link DatabaseErrorHandler} to be
* used to handle corruption when sqlite reports database corruption.</p>
*
- * <b>Note:</b> Applications with {@code targetSdkVersion}
- * {@link android.os.Build.VERSION_CODES#K} or greater have home directories
- * with {@code 0700} permissions. Because an application's home directory
- * is no longer world-accessible, {@code SQLiteDatabase}s created with {@code mode}
- * {@link #MODE_WORLD_READABLE} or {@link #MODE_WORLD_WRITEABLE} will not be
- * accessible to other applications.
- *
* @param name The name (unique in the application package) of the database.
* @param mode Operating mode. Use 0 or {@link #MODE_PRIVATE} for the
* default operation, {@link #MODE_WORLD_READABLE}
@@ -825,9 +790,10 @@
* @param factory An optional factory class that is called to instantiate a
* cursor when query is called.
* @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
- * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
+ * corruption. if null, {@link android.database.DefaultDatabaseErrorHandler} is assumed.
* @return The contents of a newly created database with the given name.
* @throws android.database.sqlite.SQLiteException if the database file could not be opened.
+ *
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
@@ -2289,6 +2255,18 @@
public static final String USER_SERVICE = "user";
/**
+ * Use with {@link #getSystemService} to retrieve a
+ * {@link android.app.AppOpsManager} for tracking application operations
+ * on the device.
+ *
+ * @see #getSystemService
+ * @see android.app.AppOpsManager
+ *
+ * @hide
+ */
+ public static final String APP_OPS_SERVICE = "appops";
+
+ /**
* Determine whether the given permission is allowed for a particular
* process and user ID running in the system.
*
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 9f7a104..4e89dec 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -65,9 +65,14 @@
Cursor cursor = getContext().getContentResolver().query(mUri, mProjection, mSelection,
mSelectionArgs, mSortOrder, mCancellationSignal);
if (cursor != null) {
- // Ensure the cursor window is filled
- cursor.getCount();
- registerContentObserver(cursor, mObserver);
+ try {
+ // Ensure the cursor window is filled.
+ cursor.getCount();
+ registerContentObserver(cursor, mObserver);
+ } catch (RuntimeException ex) {
+ cursor.close();
+ throw ex;
+ }
}
return cursor;
} finally {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index cf0603e..89b1bbd 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1950,7 +1950,7 @@
/**
* Broadcast Action: External media is present, but not mounted at its mount point.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the unmounted media is contained in the Intent.mData field.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
@@ -1971,7 +1971,7 @@
/**
* Broadcast Action: External media is present and mounted at its mount point.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the mounted media is contained in the Intent.mData field.
* The Intent contains an extra with name "read-only" and Boolean value to indicate if the
* media was mounted read only.
*/
@@ -2002,7 +2002,7 @@
/**
* Broadcast Action: External media is present but cannot be mounted.
- * The path to the mount point for the removed media is contained in the Intent.mData field.
+ * The path to the mount point for the unmountable media is contained in the Intent.mData field.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 8ba1988..cdd9195 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -1280,6 +1280,22 @@
throws NameNotFoundException;
/**
+ * @hide Return the uid associated with the given package name for the
+ * given user.
+ *
+ * <p>Throws {@link NameNotFoundException} if a package with the given
+ * name can not be found on the system.
+ *
+ * @param packageName The full name (i.e. com.google.apps.contacts) of the
+ * desired package.
+ * @param userHandle The user handle identifier to look up the package under.
+ *
+ * @return Returns an integer uid who owns the given package name.
+ */
+ public abstract int getPackageUid(String packageName, int userHandle)
+ throws NameNotFoundException;
+
+ /**
* Retrieve all of the information we know about a particular permission.
*
* <p>Throws {@link NameNotFoundException} if a permission with the given
diff --git a/core/java/android/database/CursorToBulkCursorAdaptor.java b/core/java/android/database/CursorToBulkCursorAdaptor.java
index 525be96..82a61d4 100644
--- a/core/java/android/database/CursorToBulkCursorAdaptor.java
+++ b/core/java/android/database/CursorToBulkCursorAdaptor.java
@@ -132,6 +132,11 @@
}
}
+ /**
+ * Returns an object that contains sufficient metadata to reconstruct
+ * the cursor remotely. May throw if an error occurs when executing the query
+ * and obtaining the row count.
+ */
public BulkCursorDescriptor getBulkCursorDescriptor() {
synchronized (mLock) {
throwIfCursorIsClosed();
diff --git a/core/java/android/database/sqlite/SQLiteCursor.java b/core/java/android/database/sqlite/SQLiteCursor.java
index b29897e..5a1a8e2 100644
--- a/core/java/android/database/sqlite/SQLiteCursor.java
+++ b/core/java/android/database/sqlite/SQLiteCursor.java
@@ -138,17 +138,26 @@
private void fillWindow(int requiredPos) {
clearOrCreateWindow(getDatabase().getPath());
- if (mCount == NO_COUNT) {
- int startPos = DatabaseUtils.cursorPickFillWindowStartPosition(requiredPos, 0);
- mCount = mQuery.fillWindow(mWindow, startPos, requiredPos, true);
- mCursorWindowCapacity = mWindow.getNumRows();
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "received count(*) from native_fill_window: " + mCount);
+ try {
+ if (mCount == NO_COUNT) {
+ int startPos = DatabaseUtils.cursorPickFillWindowStartPosition(requiredPos, 0);
+ mCount = mQuery.fillWindow(mWindow, startPos, requiredPos, true);
+ mCursorWindowCapacity = mWindow.getNumRows();
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "received count(*) from native_fill_window: " + mCount);
+ }
+ } else {
+ int startPos = DatabaseUtils.cursorPickFillWindowStartPosition(requiredPos,
+ mCursorWindowCapacity);
+ mQuery.fillWindow(mWindow, startPos, requiredPos, false);
}
- } else {
- int startPos = DatabaseUtils.cursorPickFillWindowStartPosition(requiredPos,
- mCursorWindowCapacity);
- mQuery.fillWindow(mWindow, startPos, requiredPos, false);
+ } catch (RuntimeException ex) {
+ // Close the cursor window if the query failed and therefore will
+ // not produce any results. This helps to avoid accidentally leaking
+ // the cursor window if the client does not correctly handle exceptions
+ // and fails to close the cursor.
+ closeWindow();
+ throw ex;
}
}
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index 0b23cb7..689dae5 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -19,6 +19,8 @@
import android.os.Parcelable;
import android.os.Parcel;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.util.EnumMap;
/**
@@ -312,7 +314,9 @@
}
}
- void setRoaming(boolean isRoaming) {
+ /** {@hide} */
+ @VisibleForTesting
+ public void setRoaming(boolean isRoaming) {
synchronized (this) {
mIsRoaming = isRoaming;
}
diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java
index fe6d4eb..5b60c0d 100644
--- a/core/java/android/net/http/SslCertificate.java
+++ b/core/java/android/net/http/SslCertificate.java
@@ -334,9 +334,11 @@
/**
* A distinguished name helper class: a 3-tuple of:
- * - common name (CN),
- * - organization (O),
- * - organizational unit (OU)
+ * <ul>
+ * <li>the most specific common name (CN)</li>
+ * <li>the most specific organization (O)</li>
+ * <li>the most specific organizational unit (OU)</li>
+ * <ul>
*/
public class DName {
/**
@@ -360,8 +362,15 @@
private String mUName;
/**
- * Creates a new distinguished name
- * @param dName The distinguished name
+ * Creates a new {@code DName} from a string. The attributes
+ * are assumed to come in most significant to least
+ * significant order which is true of human readable values
+ * returned by methods such as {@code X500Principal.getName()}.
+ * Be aware that the underlying sources of distinguished names
+ * such as instances of {@code X509Certificate} are encoded in
+ * least significant to most significant order, so make sure
+ * the value passed here has the expected ordering of
+ * attributes.
*/
public DName(String dName) {
if (dName != null) {
@@ -374,18 +383,24 @@
for (int i = 0; i < oid.size(); i++) {
if (oid.elementAt(i).equals(X509Name.CN)) {
- mCName = (String) val.elementAt(i);
+ if (mCName == null) {
+ mCName = (String) val.elementAt(i);
+ }
continue;
}
if (oid.elementAt(i).equals(X509Name.O)) {
- mOName = (String) val.elementAt(i);
- continue;
+ if (mOName == null) {
+ mOName = (String) val.elementAt(i);
+ continue;
+ }
}
if (oid.elementAt(i).equals(X509Name.OU)) {
- mUName = (String) val.elementAt(i);
- continue;
+ if (mUName == null) {
+ mUName = (String) val.elementAt(i);
+ continue;
+ }
}
}
} catch (IllegalArgumentException ex) {
@@ -402,21 +417,21 @@
}
/**
- * @return The Common-name (CN) component of this name
+ * @return The most specific Common-name (CN) component of this name
*/
public String getCName() {
return mCName != null ? mCName : "";
}
/**
- * @return The Organization (O) component of this name
+ * @return The most specific Organization (O) component of this name
*/
public String getOName() {
return mOName != null ? mOName : "";
}
/**
- * @return The Organizational Unit (OU) component of this name
+ * @return The most specific Organizational Unit (OU) component of this name
*/
public String getUName() {
return mUName != null ? mUName : "";
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index 53b41d5..7c3123f 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -197,7 +197,7 @@
isResumed = state.resumed;
}
if (isResumed) {
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
}
@@ -211,7 +211,7 @@
isResumed = state.resumed;
}
if (isResumed) {
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
}
@@ -223,7 +223,7 @@
isResumed = state.resumed;
}
if (isResumed) {
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
}
@@ -236,7 +236,7 @@
isResumed = state.resumed;
}
if (isResumed) {
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
}
@@ -249,18 +249,17 @@
isResumed = state.resumed;
}
if (isResumed) {
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
}
/**
* Request or unrequest NFC service callbacks for NDEF push.
* Makes IPC call - do not hold lock.
- * TODO: Do not do IPC on every onPause/onResume
*/
- void requestNfcServiceCallback(boolean request) {
+ void requestNfcServiceCallback() {
try {
- NfcAdapter.sService.setNdefPushCallback(request ? this : null);
+ NfcAdapter.sService.setNdefPushCallback(this);
} catch (RemoteException e) {
mAdapter.attemptDeadServiceRecovery(e);
}
@@ -355,7 +354,7 @@
if (state == null) return;
state.resumed = true;
}
- requestNfcServiceCallback(true);
+ requestNfcServiceCallback();
}
/** Callback from Activity life-cycle, on main thread */
@@ -367,7 +366,6 @@
if (state == null) return;
state.resumed = false;
}
- requestNfcServiceCallback(false);
}
/** Callback from Activity life-cycle, on main thread */
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 4baceed..6ad382b 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -174,31 +174,25 @@
* Broadcast Action: The state of the local NFC adapter has been
* changed.
* <p>For example, NFC has been turned on or off.
- * <p>Always contains the extra field {@link #EXTRA_STATE}
- * @hide
+ * <p>Always contains the extra field {@link #EXTRA_ADAPTER_STATE}
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_ADAPTER_STATE_CHANGED =
"android.nfc.action.ADAPTER_STATE_CHANGED";
/**
- * Used as an int extra field in {@link #ACTION_STATE_CHANGED}
+ * Used as an int extra field in {@link #ACTION_ADAPTER_STATE_CHANGED}
* intents to request the current power state. Possible values are:
* {@link #STATE_OFF},
* {@link #STATE_TURNING_ON},
* {@link #STATE_ON},
* {@link #STATE_TURNING_OFF},
- * @hide
*/
public static final String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE";
- /** @hide */
public static final int STATE_OFF = 1;
- /** @hide */
public static final int STATE_TURNING_ON = 2;
- /** @hide */
public static final int STATE_ON = 3;
- /** @hide */
public static final int STATE_TURNING_OFF = 4;
/** @hide */
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 9821824..abbb6a1 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -93,6 +93,11 @@
public static final int VIDEO_TURNED_ON = 8;
/**
+ * A constant indicating a vibrator on timer
+ */
+ public static final int VIBRATOR_ON = 9;
+
+ /**
* Include all of the data in the stats, including previously saved data.
*/
public static final int STATS_SINCE_CHARGED = 0;
@@ -131,6 +136,7 @@
private static final String APK_DATA = "apk";
private static final String PROCESS_DATA = "pr";
private static final String SENSOR_DATA = "sr";
+ private static final String VIBRATOR_DATA = "vib";
private static final String WAKELOCK_DATA = "wl";
private static final String KERNEL_WAKELOCK_DATA = "kwl";
private static final String NETWORK_DATA = "nt";
@@ -277,6 +283,7 @@
int which);
public abstract long getAudioTurnedOnTime(long batteryRealtime, int which);
public abstract long getVideoTurnedOnTime(long batteryRealtime, int which);
+ public abstract Timer getVibratorOnTimer();
/**
* Note that these must match the constants in android.os.PowerManager.
@@ -1395,6 +1402,16 @@
}
}
+ Timer vibTimer = u.getVibratorOnTimer();
+ if (vibTimer != null) {
+ // Convert from microseconds to milliseconds with rounding
+ long totalTime = (vibTimer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000;
+ int count = vibTimer.getCountLocked(which);
+ if (totalTime != 0) {
+ dumpLine(pw, uid, category, VIBRATOR_DATA, totalTime, count);
+ }
+ }
+
Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats();
if (processStats.size() > 0) {
for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent
@@ -1919,6 +1936,26 @@
}
}
+ Timer vibTimer = u.getVibratorOnTimer();
+ if (vibTimer != null) {
+ // Convert from microseconds to milliseconds with rounding
+ long totalTime = (vibTimer.getTotalTimeLocked(
+ batteryRealtime, which) + 500) / 1000;
+ int count = vibTimer.getCountLocked(which);
+ //timer.logState();
+ if (totalTime != 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Vibrator: ");
+ formatTimeMs(sb, totalTime);
+ sb.append("realtime (");
+ sb.append(count);
+ sb.append(" times)");
+ pw.println(sb.toString());
+ uidActivity = true;
+ }
+ }
+
Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats();
if (processStats.size() > 0) {
for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index d69d2a6..52c89e8 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -434,12 +434,6 @@
/**
* Android X.X: "K". Just "K"
- *
- * <p>Applications targeting this or a later release will get these
- * new changes in behavior:</p>
- * <ul>
- * <li>Application home directory permissions are now {@code 0700}.</li>
- * </ul>
*/
public static final int K = CUR_DEVELOPMENT;
}
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index 460a5fe..65eefcb 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -1061,10 +1061,7 @@
*/
public String getString(String key) {
unparcel();
- Object o = mMap.get(key);
- if (o == null) {
- return null;
- }
+ final Object o = mMap.get(key);
try {
return (String) o;
} catch (ClassCastException e) {
@@ -1079,20 +1076,12 @@
*
* @param key a String, or null
* @param defaultValue Value to return if key does not exist
- * @return a String value, or null
+ * @return the String value associated with the given key, or defaultValue
+ * if no valid String object is currently mapped to that key.
*/
public String getString(String key, String defaultValue) {
- unparcel();
- Object o = mMap.get(key);
- if (o == null) {
- return defaultValue;
- }
- try {
- return (String) o;
- } catch (ClassCastException e) {
- typeWarning(key, o, "String", e);
- return defaultValue;
- }
+ final String s = getString(key);
+ return (s == null) ? defaultValue : s;
}
/**
@@ -1105,10 +1094,7 @@
*/
public CharSequence getCharSequence(String key) {
unparcel();
- Object o = mMap.get(key);
- if (o == null) {
- return null;
- }
+ final Object o = mMap.get(key);
try {
return (CharSequence) o;
} catch (ClassCastException e) {
@@ -1123,20 +1109,12 @@
*
* @param key a String, or null
* @param defaultValue Value to return if key does not exist
- * @return a CharSequence value, or null
+ * @return the CharSequence value associated with the given key, or defaultValue
+ * if no valid CharSequence object is currently mapped to that key.
*/
public CharSequence getCharSequence(String key, CharSequence defaultValue) {
- unparcel();
- Object o = mMap.get(key);
- if (o == null) {
- return defaultValue;
- }
- try {
- return (CharSequence) o;
- } catch (ClassCastException e) {
- typeWarning(key, o, "CharSequence", e);
- return defaultValue;
- }
+ final CharSequence cs = getCharSequence(key);
+ return (cs == null) ? defaultValue : cs;
}
/**
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index 2c2fe8a..15cedf9 100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
@@ -20,8 +20,8 @@
interface IVibratorService
{
boolean hasVibrator();
- void vibrate(long milliseconds, IBinder token);
- void vibratePattern(in long[] pattern, int repeat, IBinder token);
+ void vibrate(String packageName, long milliseconds, IBinder token);
+ void vibratePattern(String packageName, in long[] pattern, int repeat, IBinder token);
void cancelVibrate(IBinder token);
}
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index 7c5a47e..54ea385 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -16,6 +16,7 @@
package android.os;
+import android.content.Context;
import android.util.Log;
/**
@@ -26,10 +27,18 @@
public class SystemVibrator extends Vibrator {
private static final String TAG = "Vibrator";
+ private final String mPackageName;
private final IVibratorService mService;
private final Binder mToken = new Binder();
public SystemVibrator() {
+ mPackageName = null;
+ mService = IVibratorService.Stub.asInterface(
+ ServiceManager.getService("vibrator"));
+ }
+
+ public SystemVibrator(Context context) {
+ mPackageName = context.getPackageName();
mService = IVibratorService.Stub.asInterface(
ServiceManager.getService("vibrator"));
}
@@ -54,7 +63,7 @@
return;
}
try {
- mService.vibrate(milliseconds, mToken);
+ mService.vibrate(mPackageName, milliseconds, mToken);
} catch (RemoteException e) {
Log.w(TAG, "Failed to vibrate.", e);
}
@@ -71,7 +80,7 @@
// anyway
if (repeat < pattern.length) {
try {
- mService.vibratePattern(pattern, repeat, mToken);
+ mService.vibratePattern(mPackageName, pattern, repeat, mToken);
} catch (RemoteException e) {
Log.w(TAG, "Failed to vibrate.", e);
}
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java
index cc96152..d205253 100644
--- a/core/java/android/os/UserHandle.java
+++ b/core/java/android/os/UserHandle.java
@@ -16,6 +16,8 @@
package android.os;
+import java.io.PrintWriter;
+
/**
* Representation of a user on the device.
*/
@@ -152,6 +154,50 @@
}
/**
+ * Generate a text representation of the uid, breaking out its individual
+ * components -- user, app, isolated, etc.
+ * @hide
+ */
+ public static void formatUid(StringBuilder sb, int uid) {
+ if (uid < Process.FIRST_APPLICATION_UID) {
+ sb.append(uid);
+ } else {
+ sb.append('u');
+ sb.append(getUserId(uid));
+ final int appId = getAppId(uid);
+ if (appId >= Process.FIRST_ISOLATED_UID && appId <= Process.LAST_ISOLATED_UID) {
+ sb.append('i');
+ sb.append(appId - Process.FIRST_ISOLATED_UID);
+ } else {
+ sb.append('a');
+ sb.append(appId);
+ }
+ }
+ }
+
+ /**
+ * Generate a text representation of the uid, breaking out its individual
+ * components -- user, app, isolated, etc.
+ * @hide
+ */
+ public static void formatUid(PrintWriter pw, int uid) {
+ if (uid < Process.FIRST_APPLICATION_UID) {
+ pw.print(uid);
+ } else {
+ pw.print('u');
+ pw.print(getUserId(uid));
+ final int appId = getAppId(uid);
+ if (appId >= Process.FIRST_ISOLATED_UID && appId <= Process.LAST_ISOLATED_UID) {
+ pw.print('i');
+ pw.print(appId - Process.FIRST_ISOLATED_UID);
+ } else {
+ pw.print('a');
+ pw.print(appId);
+ }
+ }
+ }
+
+ /**
* Returns the user id of the current process
* @return user id of the current process
* @hide
diff --git a/core/java/android/provider/CalendarContract.java b/core/java/android/provider/CalendarContract.java
index af6e88e9..5fdca86 100644
--- a/core/java/android/provider/CalendarContract.java
+++ b/core/java/android/provider/CalendarContract.java
@@ -302,9 +302,16 @@
* Used to indicate that local, unsynced, changes are present.
* <P>Type: INTEGER (long)</P>
*/
+
public static final String DIRTY = "dirty";
/**
+ * Used in conjunction with {@link #DIRTY} to indicate what packages wrote local changes.
+ * <P>Type: TEXT</P>
+ */
+ public static final String MUTATORS = "mutators";
+
+ /**
* Whether the row has been deleted but not synced to the server. A
* deleted row should be ignored.
* <P>
@@ -525,6 +532,7 @@
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, MUTATORS);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC1);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, CAL_SYNC2);
@@ -647,6 +655,7 @@
* <li>{@link #CALENDAR_COLOR}</li>
* <li>{@link #_SYNC_ID}</li>
* <li>{@link #DIRTY}</li>
+ * <li>{@link #MUTATORS}</li>
* <li>{@link #OWNER_ACCOUNT}</li>
* <li>{@link #MAX_REMINDERS}</li>
* <li>{@link #ALLOWED_REMINDERS}</li>
@@ -714,6 +723,7 @@
ACCOUNT_TYPE,
_SYNC_ID,
DIRTY,
+ MUTATORS,
OWNER_ACCOUNT,
MAX_REMINDERS,
ALLOWED_REMINDERS,
@@ -1393,6 +1403,7 @@
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, IS_ORGANIZER);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, _SYNC_ID);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, DIRTY);
+ DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, MUTATORS);
DatabaseUtils.cursorLongToContentValuesIfPresent(cursor, cv, LAST_SYNCED);
DatabaseUtils.cursorIntToContentValuesIfPresent(cursor, cv, DELETED);
DatabaseUtils.cursorStringToContentValuesIfPresent(cursor, cv, SYNC_DATA1);
@@ -1599,6 +1610,7 @@
* The following Events columns are writable only by a sync adapter
* <ul>
* <li>{@link #DIRTY}</li>
+ * <li>{@link #MUTATORS}</li>
* <li>{@link #_SYNC_ID}</li>
* <li>{@link #SYNC_DATA1}</li>
* <li>{@link #SYNC_DATA2}</li>
@@ -1688,6 +1700,7 @@
public static final String[] SYNC_WRITABLE_COLUMNS = new String[] {
_SYNC_ID,
DIRTY,
+ MUTATORS,
SYNC_DATA1,
SYNC_DATA2,
SYNC_DATA3,
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index d909362..122f8a1 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -503,8 +503,15 @@
mNumberOfBlocks = newNumberOfBlocks;
final int deltaLines = newLineCount - (endLine - startLine + 1);
- for (int i = firstBlock + numAddedBlocks; i < mNumberOfBlocks; i++) {
- mBlockEndLines[i] += deltaLines;
+ if (deltaLines != 0) {
+ // Display list whose index is >= mIndexFirstChangedBlock is valid
+ // but it needs to update its drawing location.
+ mIndexFirstChangedBlock = firstBlock + numAddedBlocks;
+ for (int i = mIndexFirstChangedBlock; i < mNumberOfBlocks; i++) {
+ mBlockEndLines[i] += deltaLines;
+ }
+ } else {
+ mIndexFirstChangedBlock = mNumberOfBlocks;
}
int blockIndex = firstBlock;
@@ -559,6 +566,20 @@
return mNumberOfBlocks;
}
+ /**
+ * @hide
+ */
+ public int getIndexFirstChangedBlock() {
+ return mIndexFirstChangedBlock;
+ }
+
+ /**
+ * @hide
+ */
+ public void setIndexFirstChangedBlock(int i) {
+ mIndexFirstChangedBlock = i;
+ }
+
@Override
public int getLineCount() {
return mInts.size() - 1;
@@ -697,6 +718,8 @@
private int[] mBlockIndices;
// Number of items actually currently being used in the above 2 arrays
private int mNumberOfBlocks;
+ // The first index of the blocks whose locations are changed
+ private int mIndexFirstChangedBlock;
private int mTopPadding, mBottomPadding;
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index b64a06e..7739ff7 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -1013,6 +1013,17 @@
private static native void nDrawPath(int renderer, int path, int paint);
private static native void nDrawRects(int renderer, int region, int paint);
+ void drawRects(float[] rects, int count, Paint paint) {
+ int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+ try {
+ nDrawRects(mRenderer, rects, count, paint.mNativePaint);
+ } finally {
+ if (modifiers != MODIFIER_NONE) nResetModifiers(mRenderer, modifiers);
+ }
+ }
+
+ private static native void nDrawRects(int renderer, float[] rects, int count, int paint);
+
@Override
public void drawPicture(Picture picture) {
if (picture.createdFromStream) {
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 157c321..86d04b6 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -29,6 +29,7 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.Trace;
+import android.util.DisplayMetrics;
import android.util.Log;
import com.google.android.gles_jni.EGLImpl;
@@ -87,13 +88,24 @@
*
* Possible values:
* "true", to enable profiling
+ * "visual", to enable profiling and visualize the results on screen
* "false", to disable profiling
- *
+ *
+ * @see #PROFILE_PROPERTY_VISUALIZE
+ *
* @hide
*/
public static final String PROFILE_PROPERTY = "debug.hwui.profile";
/**
+ * Value for {@link #PROFILE_PROPERTY}. When the property is set to this
+ * value, profiling data will be visualized on screen.
+ *
+ * @hide
+ */
+ public static final String PROFILE_PROPERTY_VISUALIZE = "visual";
+
+ /**
* System property used to specify the number of frames to be used
* when doing hardware rendering profiling.
* The default value of this property is #PROFILE_MAX_FRAMES.
@@ -342,7 +354,7 @@
* Notifies EGL that the frame is about to be rendered.
* @param size
*/
- private static void beginFrame(int[] size) {
+ static void beginFrame(int[] size) {
nBeginFrame(size);
}
@@ -648,10 +660,14 @@
boolean mUpdateDirtyRegions;
boolean mProfileEnabled;
+ boolean mProfileVisualizerEnabled;
float[] mProfileData;
ReentrantLock mProfileLock;
int mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
-
+
+ float[][] mProfileRects;
+ Paint mProfilePaint;
+
boolean mDebugDirtyRegions;
boolean mShowOverdraw;
@@ -674,18 +690,33 @@
@Override
boolean loadSystemProperties(Surface surface) {
+ boolean value;
boolean changed = false;
- boolean value = SystemProperties.getBoolean(PROFILE_PROPERTY, false);
+ String profiling = SystemProperties.get(PROFILE_PROPERTY);
+ value = PROFILE_PROPERTY_VISUALIZE.equalsIgnoreCase(profiling);
+
+ if (value != mProfileVisualizerEnabled) {
+ changed = true;
+ mProfileVisualizerEnabled = value;
+
+ mProfileRects = null;
+ mProfilePaint = null;
+ }
+
+ // If on-screen profiling is not enabled, we need to check whether
+ // console profiling only is enabled
+ if (!value) {
+ value = Boolean.parseBoolean(profiling);
+ }
+
if (value != mProfileEnabled) {
changed = true;
mProfileEnabled = value;
if (mProfileEnabled) {
Log.d(LOG_TAG, "Profiling hardware renderer");
- }
- if (mProfileEnabled) {
int maxProfileFrames = SystemProperties.getInt(PROFILE_MAXFRAMES_PROPERTY,
PROFILE_MAX_FRAMES);
mProfileData = new float[maxProfileFrames * PROFILE_FRAME_DATA_COUNT];
@@ -698,6 +729,8 @@
mProfileData = null;
mProfileLock = null;
}
+
+ mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
}
value = SystemProperties.getBoolean(DEBUG_DIRTY_REGIONS_PROPERTY, false);
@@ -1175,23 +1208,7 @@
mProfileLock.lock();
}
- // We had to change the current surface and/or context, redraw everything
- if (surfaceState == SURFACE_STATE_UPDATED) {
- dirty = null;
- beginFrame(null);
- } else {
- int[] size = mSurfaceSize;
- beginFrame(size);
-
- if (size[1] != mHeight || size[0] != mWidth) {
- mWidth = size[0];
- mHeight = size[1];
-
- canvas.setViewport(mWidth, mHeight);
-
- dirty = null;
- }
- }
+ dirty = beginFrame(canvas, dirty, surfaceState);
int saveCount = 0;
int status = DisplayList.STATUS_DONE;
@@ -1201,63 +1218,19 @@
== View.PFLAG_INVALIDATED;
view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
- long getDisplayListStartTime = 0;
- if (mProfileEnabled) {
- mProfileCurrentFrame += PROFILE_FRAME_DATA_COUNT;
- if (mProfileCurrentFrame >= mProfileData.length) {
- mProfileCurrentFrame = 0;
- }
-
- getDisplayListStartTime = System.nanoTime();
- }
-
+ long buildDisplayListStartTime = startBuildDisplayListProfiling();
canvas.clearLayerUpdates();
- DisplayList displayList;
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
- try {
- displayList = view.getDisplayList();
- } finally {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
+ DisplayList displayList = buildDisplayList(view);
+ status = prepareFrame(dirty);
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "prepareFrame");
- try {
- status = onPreDraw(dirty);
- } finally {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
saveCount = canvas.save();
callbacks.onHardwarePreDraw(canvas);
- if (mProfileEnabled) {
- long now = System.nanoTime();
- float total = (now - getDisplayListStartTime) * 0.000001f;
- //noinspection PointlessArithmeticExpression
- mProfileData[mProfileCurrentFrame] = total;
- }
+ endBuildDisplayListProfiling(buildDisplayListStartTime);
if (displayList != null) {
- long drawDisplayListStartTime = 0;
- if (mProfileEnabled) {
- drawDisplayListStartTime = System.nanoTime();
- }
-
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawDisplayList");
- try {
- status |= canvas.drawDisplayList(displayList, mRedrawClip,
- DisplayList.FLAG_CLIP_CHILDREN);
- } finally {
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- }
-
- if (mProfileEnabled) {
- long now = System.nanoTime();
- float total = (now - drawDisplayListStartTime) * 0.000001f;
- mProfileData[mProfileCurrentFrame + 1] = total;
- }
-
- handleFunctorStatus(attachInfo, status);
+ status = drawDisplayList(attachInfo, canvas, displayList, status);
} else {
// Shouldn't reach here
view.draw(canvas);
@@ -1269,43 +1242,19 @@
mFrameCount++;
- if (mDebugDirtyRegions) {
- if (mDebugPaint == null) {
- mDebugPaint = new Paint();
- mDebugPaint.setColor(0x7fff0000);
- }
-
- if (dirty != null && (mFrameCount & 1) == 0) {
- canvas.drawRect(dirty, mDebugPaint);
- }
- }
+ debugDirtyRegions(dirty, canvas);
+ drawProfileData(attachInfo);
}
onPostDraw();
- attachInfo.mIgnoreDirtyState = false;
-
- if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) {
- long eglSwapBuffersStartTime = 0;
- if (mProfileEnabled) {
- eglSwapBuffersStartTime = System.nanoTime();
- }
-
- sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
-
- if (mProfileEnabled) {
- long now = System.nanoTime();
- float total = (now - eglSwapBuffersStartTime) * 0.000001f;
- mProfileData[mProfileCurrentFrame + 2] = total;
- }
-
- checkEglErrors();
- }
+ swapBuffers(status);
if (mProfileEnabled) {
mProfileLock.unlock();
}
+ attachInfo.mIgnoreDirtyState = false;
return dirty == null;
}
}
@@ -1313,6 +1262,133 @@
return false;
}
+ abstract void drawProfileData(View.AttachInfo attachInfo);
+
+ private Rect beginFrame(HardwareCanvas canvas, Rect dirty, int surfaceState) {
+ // We had to change the current surface and/or context, redraw everything
+ if (surfaceState == SURFACE_STATE_UPDATED) {
+ dirty = null;
+ beginFrame(null);
+ } else {
+ int[] size = mSurfaceSize;
+ beginFrame(size);
+
+ if (size[1] != mHeight || size[0] != mWidth) {
+ mWidth = size[0];
+ mHeight = size[1];
+
+ canvas.setViewport(mWidth, mHeight);
+
+ dirty = null;
+ }
+ }
+
+ if (mProfileEnabled && mProfileVisualizerEnabled) dirty = null;
+
+ return dirty;
+ }
+
+ private long startBuildDisplayListProfiling() {
+ if (mProfileEnabled) {
+ mProfileCurrentFrame += PROFILE_FRAME_DATA_COUNT;
+ if (mProfileCurrentFrame >= mProfileData.length) {
+ mProfileCurrentFrame = 0;
+ }
+
+ return System.nanoTime();
+ }
+ return 0;
+ }
+
+ private void endBuildDisplayListProfiling(long getDisplayListStartTime) {
+ if (mProfileEnabled) {
+ long now = System.nanoTime();
+ float total = (now - getDisplayListStartTime) * 0.000001f;
+ //noinspection PointlessArithmeticExpression
+ mProfileData[mProfileCurrentFrame] = total;
+ }
+ }
+
+ private static DisplayList buildDisplayList(View view) {
+ DisplayList displayList;
+ Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
+ try {
+ displayList = view.getDisplayList();
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ }
+ return displayList;
+ }
+
+ private int prepareFrame(Rect dirty) {
+ int status;
+ Trace.traceBegin(Trace.TRACE_TAG_VIEW, "prepareFrame");
+ try {
+ status = onPreDraw(dirty);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ }
+ return status;
+ }
+
+ private int drawDisplayList(View.AttachInfo attachInfo, HardwareCanvas canvas,
+ DisplayList displayList, int status) {
+
+ long drawDisplayListStartTime = 0;
+ if (mProfileEnabled) {
+ drawDisplayListStartTime = System.nanoTime();
+ }
+
+ Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawDisplayList");
+ try {
+ status |= canvas.drawDisplayList(displayList, mRedrawClip,
+ DisplayList.FLAG_CLIP_CHILDREN);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+ }
+
+ if (mProfileEnabled) {
+ long now = System.nanoTime();
+ float total = (now - drawDisplayListStartTime) * 0.000001f;
+ mProfileData[mProfileCurrentFrame + 1] = total;
+ }
+
+ handleFunctorStatus(attachInfo, status);
+ return status;
+ }
+
+ private void swapBuffers(int status) {
+ if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) {
+ long eglSwapBuffersStartTime = 0;
+ if (mProfileEnabled) {
+ eglSwapBuffersStartTime = System.nanoTime();
+ }
+
+ sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
+
+ if (mProfileEnabled) {
+ long now = System.nanoTime();
+ float total = (now - eglSwapBuffersStartTime) * 0.000001f;
+ mProfileData[mProfileCurrentFrame + 2] = total;
+ }
+
+ checkEglErrors();
+ }
+ }
+
+ private void debugDirtyRegions(Rect dirty, HardwareCanvas canvas) {
+ if (mDebugDirtyRegions) {
+ if (mDebugPaint == null) {
+ mDebugPaint = new Paint();
+ mDebugPaint.setColor(0x7fff0000);
+ }
+
+ if (dirty != null && (mFrameCount & 1) == 0) {
+ canvas.drawRect(dirty, mDebugPaint);
+ }
+ }
+ }
+
private void handleFunctorStatus(View.AttachInfo attachInfo, int status) {
// If the draw flag is set, functors will be invoked while executing
// the tree of display lists
@@ -1389,8 +1465,18 @@
* Hardware renderer using OpenGL ES 2.0.
*/
static class Gl20Renderer extends GlRenderer {
+ private static final int PROFILE_DRAW_MARGIN = 0;
+ private static final int PROFILE_DRAW_WIDTH = 3;
+ private static final int[] PROFILE_DRAW_COLORS = { 0xcf3e66cc, 0xcfdc3912, 0xcfe69800 };
+ private static final int PROFILE_DRAW_CURRENT_FRAME_COLOR = 0xcf5faa4d;
+ private static final int PROFILE_DRAW_THRESHOLD_COLOR = 0xff5faa4d;
+ private static final int PROFILE_DRAW_THRESHOLD_STROKE_WIDTH = 2;
+ private static final int PROFILE_DRAW_DP_PER_MS = 7;
+
private GLES20Canvas mGlCanvas;
+ private DisplayMetrics mDisplayMetrics;
+
private static EGLSurface sPbuffer;
private static final Object[] sPbufferLock = new Object[0];
@@ -1494,6 +1580,105 @@
}
@Override
+ void drawProfileData(View.AttachInfo attachInfo) {
+ if (mProfileEnabled && mProfileVisualizerEnabled) {
+ initProfileDrawData(attachInfo);
+
+ final int pxPerMs = (int) (PROFILE_DRAW_DP_PER_MS * mDisplayMetrics.density + 0.5f);
+ final int margin = (int) (PROFILE_DRAW_MARGIN * mDisplayMetrics.density + 0.5f);
+ final int width = (int) (PROFILE_DRAW_WIDTH * mDisplayMetrics.density + 0.5f);
+
+ int x = 0;
+ int count = 0;
+ int current = 0;
+
+ for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
+ if (mProfileData[i] < 0.0f) break;
+
+ int index = count * 4;
+ if (i == mProfileCurrentFrame) current = index;
+
+ x += margin;
+ int x2 = x + width;
+
+ int y2 = mHeight;
+ int y1 = (int) (y2 - mProfileData[i] * pxPerMs);
+
+ float[] r = mProfileRects[0];
+ r[index] = x;
+ r[index + 1] = y1;
+ r[index + 2] = x2;
+ r[index + 3] = y2;
+
+ y2 = y1;
+ y1 = (int) (y2 - mProfileData[i + 1] * pxPerMs);
+
+ r = mProfileRects[1];
+ r[index] = x;
+ r[index + 1] = y1;
+ r[index + 2] = x2;
+ r[index + 3] = y2;
+
+ y2 = y1;
+ y1 = (int) (y2 - mProfileData[i + 2] * pxPerMs);
+
+ r = mProfileRects[2];
+ r[index] = x;
+ r[index + 1] = y1;
+ r[index + 2] = x2;
+ r[index + 3] = y2;
+
+ x += width;
+
+ count++;
+ }
+ x += margin;
+
+ drawGraph(count);
+ drawCurrentFrame(current);
+ drawThreshold(x, pxPerMs);
+ }
+ }
+
+ private void drawGraph(int count) {
+ for (int i = 0; i < mProfileRects.length; i++) {
+ mProfilePaint.setColor(PROFILE_DRAW_COLORS[i]);
+ mGlCanvas.drawRects(mProfileRects[i], count, mProfilePaint);
+ }
+ }
+
+ private void drawCurrentFrame(int index) {
+ mProfilePaint.setColor(PROFILE_DRAW_CURRENT_FRAME_COLOR);
+ mGlCanvas.drawRect(mProfileRects[2][index], mProfileRects[2][index + 1],
+ mProfileRects[2][index + 2], mProfileRects[0][index + 3], mProfilePaint);
+ }
+
+ private void drawThreshold(int x, int pxPerMs) {
+ mProfilePaint.setColor(PROFILE_DRAW_THRESHOLD_COLOR);
+ mProfilePaint.setStrokeWidth((int)
+ (PROFILE_DRAW_THRESHOLD_STROKE_WIDTH * mDisplayMetrics.density + 0.5f));
+ int y = mHeight - 16 * pxPerMs;
+ mGlCanvas.drawLine(0.0f, y, x, y, mProfilePaint);
+ mProfilePaint.setStrokeWidth(1.0f);
+ }
+
+ private void initProfileDrawData(View.AttachInfo attachInfo) {
+ if (mProfileRects == null) {
+ mProfileRects = new float[PROFILE_FRAME_DATA_COUNT][];
+ for (int i = 0; i < mProfileRects.length; i++) {
+ int count = mProfileData.length / PROFILE_FRAME_DATA_COUNT;
+ mProfileRects[i] = new float[count * 4];
+ }
+ mProfilePaint = new Paint();
+ }
+
+ if (mDisplayMetrics == null) {
+ mDisplayMetrics = new DisplayMetrics();
+ }
+ attachInfo.mDisplay.getMetrics(mDisplayMetrics);
+ }
+
+ @Override
void destroy(boolean full) {
try {
super.destroy(full);
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 47ef638..9377cfa 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -401,61 +401,19 @@
public void rebootSafeMode(boolean confirm);
}
- /**
- * Bit mask that is set for all enter transition.
- */
- public final int TRANSIT_ENTER_MASK = 0x1000;
-
- /**
- * Bit mask that is set for all exit transitions.
- */
- public final int TRANSIT_EXIT_MASK = 0x2000;
-
- /** Not set up for a transition. */
- public final int TRANSIT_UNSET = -1;
- /** No animation for transition. */
- public final int TRANSIT_NONE = 0;
/** Window has been added to the screen. */
- public final int TRANSIT_ENTER = 1 | TRANSIT_ENTER_MASK;
+ public static final int TRANSIT_ENTER = 1;
/** Window has been removed from the screen. */
- public final int TRANSIT_EXIT = 2 | TRANSIT_EXIT_MASK;
+ public static final int TRANSIT_EXIT = 2;
/** Window has been made visible. */
- public final int TRANSIT_SHOW = 3 | TRANSIT_ENTER_MASK;
- /** Window has been made invisible. */
- public final int TRANSIT_HIDE = 4 | TRANSIT_EXIT_MASK;
+ public static final int TRANSIT_SHOW = 3;
+ /** Window has been made invisible.
+ * TODO: Consider removal as this is unused. */
+ public static final int TRANSIT_HIDE = 4;
/** The "application starting" preview window is no longer needed, and will
* animate away to show the real window. */
- public final int TRANSIT_PREVIEW_DONE = 5;
- /** A window in a new activity is being opened on top of an existing one
- * in the same task. */
- public final int TRANSIT_ACTIVITY_OPEN = 6 | TRANSIT_ENTER_MASK;
- /** The window in the top-most activity is being closed to reveal the
- * previous activity in the same task. */
- public final int TRANSIT_ACTIVITY_CLOSE = 7 | TRANSIT_EXIT_MASK;
- /** A window in a new task is being opened on top of an existing one
- * in another activity's task. */
- public final int TRANSIT_TASK_OPEN = 8 | TRANSIT_ENTER_MASK;
- /** A window in the top-most activity is being closed to reveal the
- * previous activity in a different task. */
- public final int TRANSIT_TASK_CLOSE = 9 | TRANSIT_EXIT_MASK;
- /** A window in an existing task is being displayed on top of an existing one
- * in another activity's task. */
- public final int TRANSIT_TASK_TO_FRONT = 10 | TRANSIT_ENTER_MASK;
- /** A window in an existing task is being put below all other tasks. */
- public final int TRANSIT_TASK_TO_BACK = 11 | TRANSIT_EXIT_MASK;
- /** A window in a new activity that doesn't have a wallpaper is being
- * opened on top of one that does, effectively closing the wallpaper. */
- public final int TRANSIT_WALLPAPER_CLOSE = 12 | TRANSIT_EXIT_MASK;
- /** A window in a new activity that does have a wallpaper is being
- * opened on one that didn't, effectively opening the wallpaper. */
- public final int TRANSIT_WALLPAPER_OPEN = 13 | TRANSIT_ENTER_MASK;
- /** A window in a new activity is being opened on top of an existing one,
- * and both are on top of the wallpaper. */
- public final int TRANSIT_WALLPAPER_INTRA_OPEN = 14 | TRANSIT_ENTER_MASK;
- /** The window in the top-most activity is being closed to reveal the
- * previous activity, and both are on top of he wallpaper. */
- public final int TRANSIT_WALLPAPER_INTRA_CLOSE = 15 | TRANSIT_EXIT_MASK;
-
+ public static final int TRANSIT_PREVIEW_DONE = 5;
+
// NOTE: screen off reasons are in order of significance, with more
// important ones lower than less important ones.
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 3203eb0..728bcd3 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -404,16 +404,14 @@
}
/**
- * Sets whether the WebView should save form data. The default is true,
- * unless in private browsing mode, when the value is always false.
+ * Sets whether the WebView should save form data. The default is true.
*/
public void setSaveFormData(boolean save) {
throw new MustOverrideException();
}
/**
- * Gets whether the WebView saves form data. Always false in private
- * browsing mode.
+ * Gets whether the WebView saves form data.
*
* @return whether the WebView saves form data
* @see #setSaveFormData
@@ -596,18 +594,25 @@
}
/**
- * Tells the WebView to use a wide viewport. The default is false.
+ * Sets whether the WebView should enable support for the "viewport"
+ * HTML meta tag or should use a wide viewport.
+ * When the value of the setting is false, the layout width is always set to the
+ * width of the WebView control in device-independent (CSS) pixels.
+ * When the value is true and the page contains the viewport meta tag, the value
+ * of the width specified in the tag is used. If the page does not contain the tag or
+ * does not provide a width, then a wide viewport will be used.
*
- * @param use whether to use a wide viewport
+ * @param use whether to enable support for the viewport meta tag
*/
public synchronized void setUseWideViewPort(boolean use) {
throw new MustOverrideException();
}
/**
- * Gets whether the WebView is using a wide viewport.
+ * Gets whether the WebView supports the "viewport"
+ * HTML meta tag or will use a wide viewport.
*
- * @return true if the WebView is using a wide viewport
+ * @return true if the WebView supports the viewport meta tag
* @see #setUseWideViewPort
*/
public synchronized boolean getUseWideViewPort() {
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 41d6033..4eaa78a 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -124,7 +124,6 @@
InputMethodState mInputMethodState;
DisplayList[] mTextDisplayLists;
- int mLastLayoutHeight;
boolean mFrozenWithFocus;
boolean mSelectionMoved;
@@ -1289,20 +1288,11 @@
mTextDisplayLists = new DisplayList[ArrayUtils.idealObjectArraySize(0)];
}
- // If the height of the layout changes (usually when inserting or deleting a line,
- // but could be changes within a span), invalidate everything. We could optimize
- // more aggressively (for example, adding offsets to blocks) but it would be more
- // complex and we would only get the benefit in some cases.
- int layoutHeight = layout.getHeight();
- if (mLastLayoutHeight != layoutHeight) {
- invalidateTextDisplayList();
- mLastLayoutHeight = layoutHeight;
- }
-
DynamicLayout dynamicLayout = (DynamicLayout) layout;
int[] blockEndLines = dynamicLayout.getBlockEndLines();
int[] blockIndices = dynamicLayout.getBlockIndices();
final int numberOfBlocks = dynamicLayout.getNumberOfBlocks();
+ final int indexFirstChangedBlock = dynamicLayout.getIndexFirstChangedBlock();
int endOfPreviousBlock = -1;
int searchStartIndex = 0;
@@ -1327,7 +1317,8 @@
if (blockIsInvalid) blockDisplayList.invalidate();
}
- if (!blockDisplayList.isValid()) {
+ final boolean blockDisplayListIsInvalid = !blockDisplayList.isValid();
+ if (i >= indexFirstChangedBlock || blockDisplayListIsInvalid) {
final int blockBeginLine = endOfPreviousBlock + 1;
final int top = layout.getLineTop(blockBeginLine);
final int bottom = layout.getLineBottom(blockEndLine);
@@ -1344,24 +1335,30 @@
right = (int) (max + 0.5f);
}
- final HardwareCanvas hardwareCanvas = blockDisplayList.start();
- try {
- // Tighten the bounds of the viewport to the actual text size
- hardwareCanvas.setViewport(right - left, bottom - top);
- // The dirty rect should always be null for a display list
- hardwareCanvas.onPreDraw(null);
- // drawText is always relative to TextView's origin, this translation brings
- // this range of text back to the top left corner of the viewport
- hardwareCanvas.translate(-left, -top);
- layout.drawText(hardwareCanvas, blockBeginLine, blockEndLine);
- // No need to untranslate, previous context is popped after drawDisplayList
- } finally {
- hardwareCanvas.onPostDraw();
- blockDisplayList.end();
- blockDisplayList.setLeftTopRightBottom(left, top, right, bottom);
- // Same as drawDisplayList below, handled by our TextView's parent
- blockDisplayList.setClipChildren(false);
+ // Rebuild display list if it is invalid
+ if (blockDisplayListIsInvalid) {
+ final HardwareCanvas hardwareCanvas = blockDisplayList.start();
+ try {
+ // Tighten the bounds of the viewport to the actual text size
+ hardwareCanvas.setViewport(right - left, bottom - top);
+ // The dirty rect should always be null for a display list
+ hardwareCanvas.onPreDraw(null);
+ // drawText is always relative to TextView's origin, this translation brings
+ // this range of text back to the top left corner of the viewport
+ hardwareCanvas.translate(-left, -top);
+ layout.drawText(hardwareCanvas, blockBeginLine, blockEndLine);
+ // No need to untranslate, previous context is popped after drawDisplayList
+ } finally {
+ hardwareCanvas.onPostDraw();
+ blockDisplayList.end();
+ // Same as drawDisplayList below, handled by our TextView's parent
+ blockDisplayList.setClipChildren(false);
+ }
}
+
+ // Valid disply list whose index is >= indexFirstChangedBlock
+ // only needs to update its drawing location.
+ blockDisplayList.setLeftTopRightBottom(left, top, right, bottom);
}
((HardwareCanvas) canvas).drawDisplayList(blockDisplayList, null,
@@ -1369,6 +1366,8 @@
endOfPreviousBlock = blockEndLine;
}
+
+ dynamicLayout.setIndexFirstChangedBlock(numberOfBlocks);
} else {
// Boring layout is used for empty and hint text
layout.drawText(canvas, firstLine, lastLine);
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index b40260c..8c710ce 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -567,7 +567,10 @@
applied to the drawable, be sure to call setImageMatrix().
*/
public Matrix getImageMatrix() {
- return mMatrix;
+ if (mDrawMatrix == null) {
+ return Matrix.IDENTITY_MATRIX;
+ }
+ return mDrawMatrix;
}
public void setImageMatrix(Matrix matrix) {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d635de6..f8db622 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -6459,7 +6459,6 @@
mDeferScroll = -1;
bringPointIntoView(Math.min(curs, mText.length()));
}
- if (changed && mEditor != null) mEditor.invalidateTextDisplayList();
}
private boolean isShowingHint() {
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
new file mode 100644
index 0000000..c934587
--- /dev/null
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.app;
+
+interface IAppOpsService {
+ int noteOperation(int code, int uid, String packageName);
+ int startOperation(int code, int uid, String packageName);
+ void finishOperation(int code, int uid, String packageName);
+ int noteTimedOperation(int code, int uid, String packageName, int duration);
+ void earlyFinishOperation(int code, int uid, String packageName);
+}
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 1a76461..823e19f 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -37,6 +37,8 @@
void noteStartWakelockFromSource(in WorkSource ws, int pid, String name, int type);
void noteStopWakelockFromSource(in WorkSource ws, int pid, String name, int type);
+ void noteVibratorOn(int uid, long durationMillis);
+ void noteVibratorOff(int uid);
void noteStartGps(int uid);
void noteStopGps(int uid);
void noteScreenOn();
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 94e7a06..4d35a6b 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -16,14 +16,11 @@
package com.android.internal.os;
-import static android.net.NetworkStats.IFACE_ALL;
-import static android.net.NetworkStats.UID_ALL;
import static android.text.format.DateUtils.SECOND_IN_MILLIS;
import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
-import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkStats;
import android.os.BatteryManager;
@@ -49,7 +46,6 @@
import android.util.SparseArray;
import android.util.TimeUtils;
-import com.android.internal.R;
import com.android.internal.net.NetworkStatsFactory;
import com.android.internal.util.JournaledFile;
import com.google.android.collect.Sets;
@@ -87,7 +83,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 62 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 64 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -356,8 +352,8 @@
}
public static interface Unpluggable {
- void unplug(long batteryUptime, long batteryRealtime);
- void plug(long batteryUptime, long batteryRealtime);
+ void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime);
+ void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime);
}
/**
@@ -392,12 +388,12 @@
out.writeInt(mUnpluggedCount);
}
- public void unplug(long batteryUptime, long batteryRealtime) {
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
mUnpluggedCount = mPluggedCount;
mCount.set(mPluggedCount);
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
mPluggedCount = mCount.get();
}
@@ -587,7 +583,7 @@
out.writeLong(mUnpluggedTime);
}
- public void unplug(long batteryUptime, long batteryRealtime) {
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
if (DEBUG && mType < 0) {
Log.v(TAG, "unplug #" + mType + ": realtime=" + batteryRealtime
+ " old mUnpluggedTime=" + mUnpluggedTime
@@ -602,7 +598,7 @@
}
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
if (DEBUG && mType < 0) {
Log.v(TAG, "plug #" + mType + ": realtime=" + batteryRealtime
+ " old mTotalTime=" + mTotalTime);
@@ -731,7 +727,7 @@
boolean mTrackingReportedValues;
/*
- * A sequnce counter, incremented once for each update of the stats.
+ * A sequence counter, incremented once for each update of the stats.
*/
int mUpdateVersion;
@@ -786,8 +782,8 @@
mCurrentReportedTotalTime = totalTime;
}
- public void unplug(long batteryUptime, long batteryRealtime) {
- super.unplug(batteryUptime, batteryRealtime);
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+ super.unplug(elapsedRealtime, batteryUptime, batteryRealtime);
if (mTrackingReportedValues) {
mUnpluggedReportedTotalTime = mCurrentReportedTotalTime;
mUnpluggedReportedCount = mCurrentReportedCount;
@@ -795,8 +791,8 @@
mInDischarge = true;
}
- public void plug(long batteryUptime, long batteryRealtime) {
- super.plug(batteryUptime, batteryRealtime);
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+ super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
mInDischarge = false;
}
@@ -849,6 +845,141 @@
}
/**
+ * A timer that increments in batches. It does not run for durations, but just jumps
+ * for a pre-determined amount.
+ */
+ public static final class BatchTimer extends Timer {
+ final Uid mUid;
+
+ /**
+ * The last time at which we updated the timer. This is in elapsed realtime microseconds.
+ */
+ long mLastAddedTime;
+
+ /**
+ * The last duration that we added to the timer. This is in microseconds.
+ */
+ long mLastAddedDuration;
+
+ /**
+ * Whether we are currently in a discharge cycle.
+ */
+ boolean mInDischarge;
+
+ BatchTimer(Uid uid, int type, ArrayList<Unpluggable> unpluggables,
+ boolean inDischarge, Parcel in) {
+ super(type, unpluggables, in);
+ mUid = uid;
+ mLastAddedTime = in.readLong();
+ mLastAddedDuration = in.readLong();
+ mInDischarge = inDischarge;
+ }
+
+ BatchTimer(Uid uid, int type, ArrayList<Unpluggable> unpluggables,
+ boolean inDischarge) {
+ super(type, unpluggables);
+ mUid = uid;
+ mInDischarge = inDischarge;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, long batteryRealtime) {
+ super.writeToParcel(out, batteryRealtime);
+ out.writeLong(mLastAddedTime);
+ out.writeLong(mLastAddedDuration);
+ }
+
+ @Override
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+ recomputeLastDuration(SystemClock.elapsedRealtime() * 1000, false);
+ mInDischarge = false;
+ super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
+ }
+
+ @Override
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+ recomputeLastDuration(elapsedRealtime, false);
+ mInDischarge = true;
+ // If we are still within the last added duration, then re-added whatever remains.
+ if (mLastAddedTime == elapsedRealtime) {
+ mTotalTime += mLastAddedDuration;
+ }
+ super.unplug(elapsedRealtime, batteryUptime, batteryRealtime);
+ }
+
+ @Override
+ public void logState(Printer pw, String prefix) {
+ super.logState(pw, prefix);
+ pw.println(prefix + "mLastAddedTime=" + mLastAddedTime
+ + " mLastAddedDuration=" + mLastAddedDuration);
+ }
+
+ private long computeOverage(long curTime) {
+ if (mLastAddedTime > 0) {
+ return mLastTime + mLastAddedDuration - curTime;
+ }
+ return 0;
+ }
+
+ private void recomputeLastDuration(long curTime, boolean abort) {
+ final long overage = computeOverage(curTime);
+ if (overage > 0) {
+ // Aborting before the duration ran out -- roll back the remaining
+ // duration. Only do this if currently discharging; otherwise we didn't
+ // actually add the time.
+ if (mInDischarge) {
+ mTotalTime -= overage;
+ }
+ if (abort) {
+ mLastAddedTime = 0;
+ } else {
+ mLastAddedTime = curTime;
+ mLastAddedDuration -= overage;
+ }
+ }
+ }
+
+ public void addDuration(BatteryStatsImpl stats, long durationMillis) {
+ final long now = SystemClock.elapsedRealtime() * 1000;
+ recomputeLastDuration(now, true);
+ mLastAddedTime = now;
+ mLastAddedDuration = durationMillis * 1000;
+ if (mInDischarge) {
+ mTotalTime += mLastAddedDuration;
+ mCount++;
+ }
+ }
+
+ public void abortLastDuration(BatteryStatsImpl stats) {
+ final long now = SystemClock.elapsedRealtime() * 1000;
+ recomputeLastDuration(now, true);
+ }
+
+ @Override
+ protected int computeCurrentCountLocked() {
+ return mCount;
+ }
+
+ @Override
+ protected long computeRunTimeLocked(long curBatteryRealtime) {
+ final long overage = computeOverage(SystemClock.elapsedRealtime() * 1000);
+ if (overage > 0) {
+ return mTotalTime = overage;
+ }
+ return mTotalTime;
+ }
+
+ @Override
+ boolean reset(BatteryStatsImpl stats, boolean detachIfReset) {
+ final long now = SystemClock.elapsedRealtime() * 1000;
+ recomputeLastDuration(now, true);
+ boolean stillActive = mLastAddedTime == now;
+ super.reset(stats, !stillActive && detachIfReset);
+ return !stillActive;
+ }
+ }
+
+ /**
* State for keeping track of timing information.
*/
public static final class StopwatchTimer extends Timer {
@@ -902,12 +1033,12 @@
out.writeLong(mUpdateTime);
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
if (mNesting > 0) {
if (DEBUG && mType < 0) {
Log.v(TAG, "old mUpdateTime=" + mUpdateTime);
}
- super.plug(batteryUptime, batteryRealtime);
+ super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
mUpdateTime = batteryRealtime;
if (DEBUG && mType < 0) {
Log.v(TAG, "new mUpdateTime=" + mUpdateTime);
@@ -1443,7 +1574,7 @@
mHistoryOverflow = false;
}
- public void doUnplugLocked(long batteryUptime, long batteryRealtime) {
+ public void doUnplugLocked(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
NetworkStats.Entry entry = null;
// Track UID data usage
@@ -1462,7 +1593,7 @@
}
for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
- mUnpluggables.get(i).unplug(batteryUptime, batteryRealtime);
+ mUnpluggables.get(i).unplug(elapsedRealtime, batteryUptime, batteryRealtime);
}
// Track both mobile and total overall data
@@ -1483,7 +1614,7 @@
mBluetoothPingCount = 0;
}
- public void doPlugLocked(long batteryUptime, long batteryRealtime) {
+ public void doPlugLocked(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
NetworkStats.Entry entry = null;
for (int iu = mUidStats.size() - 1; iu >= 0; iu--) {
@@ -1498,7 +1629,7 @@
}
}
for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
- mUnpluggables.get(i).plug(batteryUptime, batteryRealtime);
+ mUnpluggables.get(i).plug(elapsedRealtime, batteryUptime, batteryRealtime);
}
// Track both mobile and total overall data
@@ -2109,6 +2240,14 @@
getUidStatsLocked(uid).noteVideoTurnedOffLocked();
}
+ public void noteVibratorOnLocked(int uid, long durationMillis) {
+ getUidStatsLocked(uid).noteVibratorOnLocked(durationMillis);
+ }
+
+ public void noteVibratorOffLocked(int uid) {
+ getUidStatsLocked(uid).noteVibratorOffLocked();
+ }
+
public void noteWifiRunningLocked(WorkSource ws) {
if (!mGlobalWifiRunning) {
mHistoryCur.states |= HistoryItem.STATE_WIFI_RUNNING_FLAG;
@@ -2402,6 +2541,8 @@
boolean mVideoTurnedOn;
StopwatchTimer mVideoTurnedOnTimer;
+ BatchTimer mVibratorOnTimer;
+
Counter[] mUserActivityCounters;
/**
@@ -2439,10 +2580,6 @@
mWifiScanTimers, mUnpluggables);
mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED,
mWifiMulticastTimers, mUnpluggables);
- mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON,
- null, mUnpluggables);
- mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON,
- null, mUnpluggables);
}
@Override
@@ -2587,15 +2724,19 @@
}
}
+ public StopwatchTimer createAudioTurnedOnTimerLocked() {
+ if (mAudioTurnedOnTimer == null) {
+ mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON,
+ null, mUnpluggables);
+ }
+ return mAudioTurnedOnTimer;
+ }
+
@Override
public void noteAudioTurnedOnLocked() {
if (!mAudioTurnedOn) {
mAudioTurnedOn = true;
- if (mAudioTurnedOnTimer == null) {
- mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON,
- null, mUnpluggables);
- }
- mAudioTurnedOnTimer.startRunningLocked(BatteryStatsImpl.this);
+ createAudioTurnedOnTimerLocked().startRunningLocked(BatteryStatsImpl.this);
}
}
@@ -2603,19 +2744,25 @@
public void noteAudioTurnedOffLocked() {
if (mAudioTurnedOn) {
mAudioTurnedOn = false;
- mAudioTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+ if (mAudioTurnedOnTimer != null) {
+ mAudioTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+ }
}
}
+ public StopwatchTimer createVideoTurnedOnTimerLocked() {
+ if (mVideoTurnedOnTimer == null) {
+ mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON,
+ null, mUnpluggables);
+ }
+ return mVideoTurnedOnTimer;
+ }
+
@Override
public void noteVideoTurnedOnLocked() {
if (!mVideoTurnedOn) {
mVideoTurnedOn = true;
- if (mVideoTurnedOnTimer == null) {
- mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON,
- null, mUnpluggables);
- }
- mVideoTurnedOnTimer.startRunningLocked(BatteryStatsImpl.this);
+ createVideoTurnedOnTimerLocked().startRunningLocked(BatteryStatsImpl.this);
}
}
@@ -2623,7 +2770,27 @@
public void noteVideoTurnedOffLocked() {
if (mVideoTurnedOn) {
mVideoTurnedOn = false;
- mVideoTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+ if (mVideoTurnedOnTimer != null) {
+ mVideoTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+ }
+ }
+ }
+
+ public BatchTimer createVibratorOnTimerLocked() {
+ if (mVibratorOnTimer == null) {
+ mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON,
+ mUnpluggables, BatteryStatsImpl.this.mOnBatteryInternal);
+ }
+ return mVibratorOnTimer;
+ }
+
+ public void noteVibratorOnLocked(long durationMillis) {
+ createVibratorOnTimerLocked().addDuration(BatteryStatsImpl.this, durationMillis);
+ }
+
+ public void noteVibratorOffLocked() {
+ if (mVibratorOnTimer != null) {
+ mVibratorOnTimer.abortLastDuration(BatteryStatsImpl.this);
}
}
@@ -2677,6 +2844,11 @@
}
@Override
+ public Timer getVibratorOnTimer() {
+ return mVibratorOnTimer;
+ }
+
+ @Override
public void noteUserActivityLocked(int type) {
if (mUserActivityCounters == null) {
initUserActivityLocked();
@@ -2747,6 +2919,14 @@
active |= !mVideoTurnedOnTimer.reset(BatteryStatsImpl.this, false);
active |= mVideoTurnedOn;
}
+ if (mVibratorOnTimer != null) {
+ if (mVibratorOnTimer.reset(BatteryStatsImpl.this, false)) {
+ mVibratorOnTimer.detach();
+ mVibratorOnTimer = null;
+ } else {
+ active = true;
+ }
+ }
mLoadedTcpBytesReceived = mLoadedTcpBytesSent = 0;
mCurrentTcpBytesReceived = mCurrentTcpBytesSent = 0;
@@ -2832,9 +3012,11 @@
}
if (mAudioTurnedOnTimer != null) {
mAudioTurnedOnTimer.detach();
+ mAudioTurnedOnTimer = null;
}
if (mVideoTurnedOnTimer != null) {
mVideoTurnedOnTimer.detach();
+ mVideoTurnedOnTimer = null;
}
if (mUserActivityCounters != null) {
for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) {
@@ -2917,6 +3099,12 @@
} else {
out.writeInt(0);
}
+ if (mVibratorOnTimer != null) {
+ out.writeInt(1);
+ mVibratorOnTimer.writeToParcel(out, batteryRealtime);
+ } else {
+ out.writeInt(0);
+ }
if (mUserActivityCounters != null) {
out.writeInt(1);
for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) {
@@ -3016,6 +3204,12 @@
mVideoTurnedOnTimer = null;
}
if (in.readInt() != 0) {
+ mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON,
+ mUnpluggables, BatteryStatsImpl.this.mOnBatteryInternal, in);
+ } else {
+ mVibratorOnTimer = null;
+ }
+ if (in.readInt() != 0) {
mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES];
for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) {
mUserActivityCounters[i] = new Counter(mUnpluggables, in);
@@ -3256,14 +3450,14 @@
mSpeedBins = new SamplingCounter[getCpuSpeedSteps()];
}
- public void unplug(long batteryUptime, long batteryRealtime) {
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
mUnpluggedUserTime = mUserTime;
mUnpluggedSystemTime = mSystemTime;
mUnpluggedStarts = mStarts;
mUnpluggedForegroundTime = mForegroundTime;
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
}
void detach() {
@@ -3550,11 +3744,11 @@
mUnpluggables.add(this);
}
- public void unplug(long batteryUptime, long batteryRealtime) {
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
mUnpluggedWakeups = mWakeups;
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
}
void detach() {
@@ -3712,13 +3906,13 @@
mUnpluggables.add(this);
}
- public void unplug(long batteryUptime, long batteryRealtime) {
+ public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
mUnpluggedStartTime = getStartTimeToNowLocked(batteryUptime);
mUnpluggedStarts = mStarts;
mUnpluggedLaunches = mLaunches;
}
- public void plug(long batteryUptime, long batteryRealtime) {
+ public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
}
void detach() {
@@ -4367,7 +4561,7 @@
}
mDischargeAmountScreenOn = 0;
mDischargeAmountScreenOff = 0;
- doUnplugLocked(mUnpluggedBatteryUptime, mUnpluggedBatteryRealtime);
+ doUnplugLocked(realtime, mUnpluggedBatteryUptime, mUnpluggedBatteryRealtime);
} else {
updateKernelWakelocksLocked();
mHistoryCur.batteryLevel = (byte)level;
@@ -4383,7 +4577,7 @@
mHighDischargeAmountSinceCharge += mDischargeUnplugLevel-level;
}
updateDischargeScreenLevelsLocked(mScreenOn, mScreenOn);
- doPlugLocked(getBatteryUptimeLocked(uptime), getBatteryRealtimeLocked(realtime));
+ doPlugLocked(realtime, getBatteryUptimeLocked(uptime), getBatteryRealtimeLocked(realtime));
}
if (doWrite || (mLastWriteTime + (60 * 1000)) < mSecRealtime) {
if (mFile != null) {
@@ -5161,11 +5355,14 @@
}
u.mAudioTurnedOn = false;
if (in.readInt() != 0) {
- u.mAudioTurnedOnTimer.readSummaryFromParcelLocked(in);
+ u.createAudioTurnedOnTimerLocked().readSummaryFromParcelLocked(in);
}
u.mVideoTurnedOn = false;
if (in.readInt() != 0) {
- u.mVideoTurnedOnTimer.readSummaryFromParcelLocked(in);
+ u.createVideoTurnedOnTimerLocked().readSummaryFromParcelLocked(in);
+ }
+ if (in.readInt() != 0) {
+ u.createVibratorOnTimerLocked().readSummaryFromParcelLocked(in);
}
if (in.readInt() != 0) {
@@ -5367,6 +5564,12 @@
} else {
out.writeInt(0);
}
+ if (u.mVibratorOnTimer != null) {
+ out.writeInt(1);
+ u.mVibratorOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+ } else {
+ out.writeInt(0);
+ }
if (u.mUserActivityCounters == null) {
out.writeInt(0);
diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java
deleted file mode 100644
index af3fd42..0000000
--- a/core/java/com/android/internal/widget/DigitalClock.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.widget;
-
-import com.android.internal.R;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.graphics.Typeface;
-import android.os.Handler;
-import android.provider.Settings;
-import android.text.format.DateFormat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import java.lang.ref.WeakReference;
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
-
-/**
- * Displays the time
- */
-public class DigitalClock extends RelativeLayout {
-
- private static final String SYSTEM = "/system/fonts/";
- private static final String SYSTEM_FONT_TIME_BACKGROUND = SYSTEM + "AndroidClock.ttf";
- private static final String SYSTEM_FONT_TIME_FOREGROUND = SYSTEM + "AndroidClock_Highlight.ttf";
- private final static String M12 = "h:mm";
- private final static String M24 = "kk:mm";
-
- private Calendar mCalendar;
- private String mFormat;
- private TextView mTimeDisplayBackground;
- private TextView mTimeDisplayForeground;
- private AmPm mAmPm;
- private ContentObserver mFormatChangeObserver;
- private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced
-
- /* called by system on minute ticks */
- private final Handler mHandler = new Handler();
- private BroadcastReceiver mIntentReceiver;
-
- private static final Typeface sBackgroundFont;
- private static final Typeface sForegroundFont;
-
- static {
- sBackgroundFont = Typeface.createFromFile(SYSTEM_FONT_TIME_BACKGROUND);
- sForegroundFont = Typeface.createFromFile(SYSTEM_FONT_TIME_FOREGROUND);
- }
-
- private static class TimeChangedReceiver extends BroadcastReceiver {
- private WeakReference<DigitalClock> mClock;
- private Context mContext;
-
- public TimeChangedReceiver(DigitalClock clock) {
- mClock = new WeakReference<DigitalClock>(clock);
- mContext = clock.getContext();
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- // Post a runnable to avoid blocking the broadcast.
- final boolean timezoneChanged =
- intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED);
- final DigitalClock clock = mClock.get();
- if (clock != null) {
- clock.mHandler.post(new Runnable() {
- public void run() {
- if (timezoneChanged) {
- clock.mCalendar = Calendar.getInstance();
- }
- clock.updateTime();
- }
- });
- } else {
- try {
- mContext.unregisterReceiver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- };
-
- static class AmPm {
- private TextView mAmPmTextView;
- private String mAmString, mPmString;
-
- AmPm(View parent, Typeface tf) {
- // No longer used, uncomment if we decide to use AM/PM indicator again
- // mAmPmTextView = (TextView) parent.findViewById(R.id.am_pm);
- if (mAmPmTextView != null && tf != null) {
- mAmPmTextView.setTypeface(tf);
- }
-
- String[] ampm = new DateFormatSymbols().getAmPmStrings();
- mAmString = ampm[0];
- mPmString = ampm[1];
- }
-
- void setShowAmPm(boolean show) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setVisibility(show ? View.VISIBLE : View.GONE);
- }
- }
-
- void setIsMorning(boolean isMorning) {
- if (mAmPmTextView != null) {
- mAmPmTextView.setText(isMorning ? mAmString : mPmString);
- }
- }
- }
-
- private static class FormatChangeObserver extends ContentObserver {
- private WeakReference<DigitalClock> mClock;
- private Context mContext;
- public FormatChangeObserver(DigitalClock clock) {
- super(new Handler());
- mClock = new WeakReference<DigitalClock>(clock);
- mContext = clock.getContext();
- }
- @Override
- public void onChange(boolean selfChange) {
- DigitalClock digitalClock = mClock.get();
- if (digitalClock != null) {
- digitalClock.setDateFormat();
- digitalClock.updateTime();
- } else {
- try {
- mContext.getContentResolver().unregisterContentObserver(this);
- } catch (RuntimeException e) {
- // Shouldn't happen
- }
- }
- }
- }
-
- public DigitalClock(Context context) {
- this(context, null);
- }
-
- public DigitalClock(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- /* The time display consists of two tones. That's why we have two overlapping text views. */
- mTimeDisplayBackground = (TextView) findViewById(R.id.timeDisplayBackground);
- mTimeDisplayBackground.setTypeface(sBackgroundFont);
- mTimeDisplayBackground.setVisibility(View.INVISIBLE);
-
- mTimeDisplayForeground = (TextView) findViewById(R.id.timeDisplayForeground);
- mTimeDisplayForeground.setTypeface(sForegroundFont);
- mAmPm = new AmPm(this, null);
- mCalendar = Calendar.getInstance();
-
- setDateFormat();
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
-
- mAttached++;
-
- /* monitor time ticks, time changed, timezone */
- if (mIntentReceiver == null) {
- mIntentReceiver = new TimeChangedReceiver(this);
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- mContext.registerReceiver(mIntentReceiver, filter);
- }
-
- /* monitor 12/24-hour display preference */
- if (mFormatChangeObserver == null) {
- mFormatChangeObserver = new FormatChangeObserver(this);
- mContext.getContentResolver().registerContentObserver(
- Settings.System.CONTENT_URI, true, mFormatChangeObserver);
- }
-
- updateTime();
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
-
- mAttached--;
-
- if (mIntentReceiver != null) {
- mContext.unregisterReceiver(mIntentReceiver);
- }
- if (mFormatChangeObserver != null) {
- mContext.getContentResolver().unregisterContentObserver(
- mFormatChangeObserver);
- }
-
- mFormatChangeObserver = null;
- mIntentReceiver = null;
- }
-
- void updateTime(Calendar c) {
- mCalendar = c;
- updateTime();
- }
-
- public void updateTime() {
- mCalendar.setTimeInMillis(System.currentTimeMillis());
-
- CharSequence newTime = DateFormat.format(mFormat, mCalendar);
- mTimeDisplayBackground.setText(newTime);
- mTimeDisplayForeground.setText(newTime);
- mAmPm.setIsMorning(mCalendar.get(Calendar.AM_PM) == 0);
- }
-
- private void setDateFormat() {
- mFormat = android.text.format.DateFormat.is24HourFormat(getContext())
- ? M24 : M12;
- mAmPm.setShowAmPm(mFormat.equals(M12));
- }
-}
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index d8d55b2..7d886da 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -449,16 +449,40 @@
renderer->drawArc(left, top, right, bottom, startAngle, sweepAngle, useCenter, paint);
}
-static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject clazz,
+static void android_view_GLES20Canvas_drawRegionAsRects(JNIEnv* env, jobject clazz,
OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) {
- SkRegion::Iterator it(*region);
- while (!it.done()) {
- const SkIRect& r = it.rect();
- renderer->drawRect(r.fLeft, r.fTop, r.fRight, r.fBottom, paint);
- it.next();
+ if (paint->getStyle() != SkPaint::kFill_Style ||
+ (paint->isAntiAlias() && !renderer->isCurrentTransformSimple())) {
+ SkRegion::Iterator it(*region);
+ while (!it.done()) {
+ const SkIRect& r = it.rect();
+ renderer->drawRect(r.fLeft, r.fTop, r.fRight, r.fBottom, paint);
+ it.next();
+ }
+ } else {
+ int count = 0;
+ Vector<float> rects;
+ SkRegion::Iterator it(*region);
+ while (!it.done()) {
+ const SkIRect& r = it.rect();
+ rects.push(r.fLeft);
+ rects.push(r.fTop);
+ rects.push(r.fRight);
+ rects.push(r.fBottom);
+ count++;
+ it.next();
+ }
+ renderer->drawRects(rects.array(), count, paint);
}
}
+static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject clazz,
+ OpenGLRenderer* renderer, jfloatArray rects, jint count, SkPaint* paint) {
+ jfloat* storage = env->GetFloatArrayElements(rects, NULL);
+ renderer->drawRects(storage, count, paint);
+ env->ReleaseFloatArrayElements(rects, storage, 0);
+}
+
static void android_view_GLES20Canvas_drawPoints(JNIEnv* env, jobject clazz,
OpenGLRenderer* renderer, jfloatArray points, jint offset, jint count, SkPaint* paint) {
jfloat* storage = env->GetFloatArrayElements(points, NULL);
@@ -958,7 +982,8 @@
{ "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor },
{ "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect },
- { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects },
+ { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRegionAsRects },
+ { "nDrawRects", "(I[FII)V", (void*) android_view_GLES20Canvas_drawRects },
{ "nDrawRoundRect", "(IFFFFFFI)V", (void*) android_view_GLES20Canvas_drawRoundRect },
{ "nDrawCircle", "(IFFFI)V", (void*) android_view_GLES20Canvas_drawCircle },
{ "nDrawOval", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawOval },
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 9822e63..e357255 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1327,21 +1327,6 @@
android:label="@string/permlab_writeGservices"
android:description="@string/permdesc_writeGservices" />
- <!-- @hide Change the screen compatibility mode of applications -->
- <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="signature"
- android:label="@string/permlab_setScreenCompatibility"
- android:description="@string/permdesc_setScreenCompatibility" />
-
- <!-- Allows an application to modify the current configuration, such
- as locale. -->
- <permission android:name="android.permission.CHANGE_CONFIGURATION"
- android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
- android:protectionLevel="system|signature"
- android:label="@string/permlab_changeConfiguration"
- android:description="@string/permdesc_changeConfiguration" />
-
<!-- Allows an application to call
{@link android.app.ActivityManager#forceStopPackage}.
@hide -->
@@ -1621,6 +1606,13 @@
android:description="@string/permdesc_updateBatteryStats"
android:protectionLevel="signature|system" />
+ <!-- Allows an application to update application operation statistics. Not for
+ use by third party apps. @hide -->
+ <permission android:name="android.permission.UPDATE_APP_OPS_STATS"
+ android:label="@string/permlab_updateAppOpsStats"
+ android:description="@string/permdesc_updateAppOpsStats"
+ android:protectionLevel="signature|system" />
+
<!-- Allows an application to open windows that are for use by parts
of the system user interface. Not for use by third party apps. -->
<permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_glogin_unlock.xml b/core/res/res/layout-sw600dp/keyguard_screen_glogin_unlock.xml
deleted file mode 100644
index a0b1aaa..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_glogin_unlock.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:color/background_dark"
- >
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:layout_above="@+id/emergencyCallButton">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <TextView
- android:id="@+id/topHeader"
- android:layout_width="match_parent"
- android:layout_height="64dip"
- android:layout_alignParentTop="true"
- android:layout_marginStart="4dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="center_vertical"
- android:drawableLeft="@drawable/ic_lock_idle_lock"
- android:drawablePadding="5dip"
- />
-
- <!-- spacer below header -->
- <View
- android:id="@+id/spacerTop"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_below="@id/topHeader"
- android:background="@drawable/divider_horizontal_dark"/>
-
- <TextView
- android:id="@+id/instructions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@+id/spacerTop"
- android:layout_marginTop="8dip"
- android:layout_marginStart="9dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@android:string/lockscreen_glogin_instructions"
- />
-
- <EditText
- android:id="@+id/login"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/instructions"
- android:layout_marginTop="8dip"
- android:layout_marginStart="7dip"
- android:layout_marginEnd="7dip"
- android:hint="@android:string/lockscreen_glogin_username_hint"
- android:inputType="textEmailAddress"
- />
-
- <EditText
- android:id="@+id/password"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/login"
- android:layout_marginTop="15dip"
- android:layout_marginStart="7dip"
- android:layout_marginEnd="7dip"
- android:inputType="textPassword"
- android:hint="@android:string/lockscreen_glogin_password_hint"
- android:nextFocusRight="@+id/ok"
- android:nextFocusDown="@+id/ok"
- />
-
- <!-- ok below password, aligned to right of screen -->
- <Button
- android:id="@+id/ok"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/password"
- android:layout_marginTop="7dip"
- android:layout_marginEnd="7dip"
- android:layout_alignParentEnd="true"
- android:text="@android:string/lockscreen_glogin_submit_button"
- />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/ok"
- android:layout_marginTop="50dip"
- android:text="@android:string/lockscreen_glogin_account_recovery_hint"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="center_horizontal"
- />
-
- </RelativeLayout>
- </ScrollView>
-
- <!-- spacer above emergency call -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginBottom="4dip"
-
- android:background="@drawable/divider_horizontal_dark"/>
-
- <!-- emergency call button at bottom center -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@android:string/lockscreen_emergency_call"
- android:visibility="gone"
- />
-
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_lock.xml b/core/res/res/layout-sw600dp/keyguard_screen_lock.xml
deleted file mode 100644
index ea061ff..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_lock.xml
+++ /dev/null
@@ -1,218 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device. It is the same for landscape
- and portrait.-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:gravity="bottom"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginBottom="15dip"
- android:layout_marginStart="15dip"
- android:layout_marginEnd="15dip"
- android:paddingTop="20dip"
- android:paddingBottom="20dip"
- android:background="@android:drawable/popup_full_dark"
- >
-
- <!-- when sim is present -->
- <TextView android:id="@+id/headerSimOk1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
- <TextView android:id="@+id/headerSimOk2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
-
- <!-- when sim is missing / locked -->
- <TextView android:id="@+id/headerSimBad1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@android:string/lockscreen_missing_sim_message"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
- <TextView android:id="@+id/headerSimBad2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="7dip"
- android:layout_marginBottom="7dip"
- android:gravity="center"
- android:text="@android:string/lockscreen_missing_sim_instructions"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
-
- <!-- spacer after carrier info / sim messages -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:background="@android:drawable/divider_horizontal_dark"/>
-
- <!-- time and date -->
- <TextView android:id="@+id/time"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
-
- <TextView android:id="@+id/date"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="18sp"/>
-
- <!-- spacer after time and date -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- battery info -->
- <LinearLayout android:id="@+id/batteryInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView android:id="@+id/batteryInfoIcon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:gravity="center"
- />
-
- <TextView android:id="@+id/batteryInfoText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:gravity="center"
- />
-
- </LinearLayout>
-
- <!-- spacer after battery info -->
- <View android:id="@+id/batteryInfoSpacer"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- next alarm info -->
-
- <LinearLayout android:id="@+id/nextAlarmInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:src="@android:drawable/ic_lock_idle_alarm"
- android:gravity="center"
- />
-
- <TextView android:id="@+id/nextAlarmText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:gravity="center"
- />
- </LinearLayout>
-
- <!-- spacer after alarm info -->
- <View android:id="@+id/nextAlarmSpacer"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"/>
-
- <!-- lock icon with 'screen locked' message
- (shown when SIM card is present) -->
- <LinearLayout android:id="@+id/screenLockedInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:src="@android:drawable/ic_lock_idle_lock"
- android:gravity="center"
- />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:text="@android:string/lockscreen_screen_locked"
- android:gravity="center"
- />
- </LinearLayout>
-
- <!-- message about how to unlock
- (shown when SIM card is present) -->
- <TextView android:id="@+id/lockInstructions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dip"
- android:gravity="center"
- android:textSize="14sp"/>
-
-
- <!-- emergency call button shown when sim is missing or PUKd -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dip"
- android:layout_marginTop="5dip"
- android:layout_gravity="center_horizontal"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
-
- </LinearLayout>
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
deleted file mode 100644
index 47d4728..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_landscape.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- left side: status and music -->
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:layout_width="0dip"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content"
- android:layout_marginBottom="24dip">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_land"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_marginBottom="50dip"
- android:layout_marginEnd="64dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <!-- right side: password -->
- <RelativeLayout
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:gravity="center">
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_centerInParent="true"
- android:layout_width="330dip"
- android:layout_height="wrap_content">
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:background="@drawable/lockscreen_password_field_dark">
-
- <EditText android:id="@+id/passwordEntry"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:gravity="center"
- android:layout_gravity="center"
- android:singleLine="true"
- android:textStyle="normal"
- android:inputType="textPassword"
- android:textSize="24sp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@null"
- android:textColor="#ffffffff"
- android:imeOptions="flagForceAscii|flagNoFullscreen|actionDone"
- />
-
- <!-- This delete button is only visible for numeric PIN entry -->
- <ImageButton android:id="@+id/pinDel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@android:drawable/ic_input_delete"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- <!-- The IME switcher button is only shown in ASCII password mode (not PIN) -->
- <ImageView android:id="@+id/switch_ime_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_lockscreen_ime"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- <!-- Numeric keyboard -->
- <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
- android:layout_width="match_parent"
- android:layout_height="330dip"
- android:background="#40000000"
- android:layout_marginTop="5dip"
- android:keyBackground="@drawable/btn_keyboard_key_ics"
- android:visibility="gone"
- android:clickable="true"
- />
-
- <!-- Emergency call button. Generally not used on tablet devices. -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_emergency_call"
- android:visibility="gone"
- style="@style/Widget.Button.Transparent"
- />
-
- </LinearLayout>
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_width="530dip"
- android:layout_height="530dip"
- android:layout_centerInParent="true"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
deleted file mode 100644
index 6dd85cb..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_password_portrait.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- top: status and emergency/forgot pattern buttons -->
- <RelativeLayout
- android:layout_height="0dip"
- android:layout_weight="0.40"
- android:layout_width="match_parent"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content"
- android:gravity="center">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_port"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_marginEnd="64dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <!-- bottom: password -->
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="0.60"
- android:gravity="center">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_centerInParent="true"
- android:orientation="vertical"
- android:gravity="center">
-
- <!-- Password entry field -->
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="330dip"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginTop="120dip"
- android:layout_marginBottom="5dip"
- android:background="@drawable/lockscreen_password_field_dark">
-
- <EditText android:id="@+id/passwordEntry"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:singleLine="true"
- android:textStyle="normal"
- android:inputType="textPassword"
- android:gravity="center"
- android:layout_gravity="center"
- android:textSize="24sp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@null"
- android:textColor="#ffffffff"
- android:imeOptions="flagForceAscii|actionDone"
- />
-
- <!-- This delete button is only visible for numeric PIN entry -->
- <ImageButton android:id="@+id/pinDel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@android:drawable/ic_input_delete"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- <ImageView android:id="@+id/switch_ime_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_lockscreen_ime"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- />
-
- <!-- Numeric keyboard -->
- <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
- android:layout_width="330dip"
- android:layout_height="260dip"
- android:background="#40000000"
- android:keyBackground="@drawable/btn_keyboard_key_ics"
- android:layout_marginBottom="80dip"
- android:clickable="true"
- />
-
- <!-- emergency call button -->
- <Button android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_emergency_call"
- android:visibility="gone"
- style="@style/Widget.Button.Transparent"
- />
-
- </LinearLayout>
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_width="440dip"
- android:layout_height="440dip"
- android:layout_centerInParent="true"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_landscape.xml
deleted file mode 100644
index efb9e2a..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_landscape.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@android:color/background_dark"
- >
-
-
- <!-- right side -->
- <!-- header text ('Enter Pin Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_above="@+id/carrier"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="30dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="24sp"
- />
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_above="@+id/pinDisplayGroup"
- android:layout_marginTop="9dip"
- android:gravity="start|bottom"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <!-- displays dots as user enters pin -->
- <LinearLayout android:id="@+id/pinDisplayGroup"
- android:orientation="horizontal"
- android:layout_centerInParent="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:addStatesFromChildren="true"
- android:gravity="center_vertical"
- android:baselineAligned="false"
- android:paddingEnd="0dip"
- android:layout_marginEnd="30dip"
- android:layout_marginStart="30dip"
- android:background="@android:drawable/edit_text"
- >
-
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:background="@null"
- android:textSize="32sp"
- android:inputType="textPassword"
- />
-
- <ImageButton android:id="@+id/backspace"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginTop="2dip"
- android:layout_marginEnd="2dip"
- android:layout_marginBottom="2dip"
- android:gravity="center"
- />
-
- </LinearLayout>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:layout_marginEnd="8dip">
-
- <Button android:id="@+id/emergencyCallButton"
- android:text="@android:string/lockscreen_emergency_call"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginEnd="8dip"
- android:textSize="18sp"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- />
-
- <Button android:id="@+id/ok"
- android:text="@android:string/ok"
- android:layout_alignParentBottom="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:textSize="18sp"
- />
- </LinearLayout>
-
-</RelativeLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml
deleted file mode 100644
index db84156..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_sim_pin_portrait.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:color/background_dark"
- android:gravity="center_horizontal">
-
- <LinearLayout android:id="@+id/topDisplayGroup"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- header text ('Enter Pin Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="9dip"
- android:gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- <!-- password entry -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters pin -->
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textColor="@android:color/primary_text_holo_light"
- android:textStyle="bold"
- android:inputType="textPassword"
- />
-
- <ImageButton android:id="@+id/backspace"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
-
- </LinearLayout>
-
- <include
- android:id="@+id/keyPad"
- layout="@android:layout/twelve_key_entry"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/topDisplayGroup"
- android:layout_marginTop="10dip"
- />
-
- <!-- spacer below keypad -->
- <View
- android:id="@+id/spacerBottom"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="6dip"
- android:layout_above="@id/emergencyCallButton"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- The emergency button should take the rest of the space and be centered vertically -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical">
-
- <!-- emergency call button -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
- </LinearLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml
deleted file mode 100644
index c6ddd1b..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_status_land.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2010, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- Status to show on the left side of lock screen -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="end">
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"
- android:drawablePadding="4dip"
- android:layout_marginTop="32dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:visibility="gone"
- />
-
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- >
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_background"
- android:layout_marginBottom="6dip"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_foreground"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- android:layout_marginBottom="6dip"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/time"
- android:layout_marginTop="10dip">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"/>
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:drawablePadding="4dip"
- android:textSize="16sp"/>
-
- </LinearLayout>
-
- <!-- Status1 is generally battery status and informational messages -->
- <TextView
- android:id="@+id/status1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dip"
- android:textSize="16sp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <TextView
- android:id="@+id/owner_info"
- android:lineSpacingExtra="8dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"
- android:layout_marginTop="20dip"
- android:singleLine="false"
- android:textColor="@color/lockscreen_owner_info"
- android:visibility="invisible"
- />
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml b/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml
deleted file mode 100644
index 765dc95..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_status_port.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2010, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- Status to show on the left side of lock screen -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="20dip"
- android:gravity="end"
- >
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"
- android:drawablePadding="4dip"
- android:layout_marginTop="32dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:visibility="gone"
- />
-
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_background"
- android:layout_marginBottom="6dip"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_pattern_unlock_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_foreground"
- android:layout_marginBottom="6dip"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/time"
- android:layout_marginTop="10dip">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"/>
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:drawablePadding="4dip"
- android:textSize="16sp"/>
-
- </LinearLayout>
-
- <TextView
- android:id="@+id/status1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dip"
- android:textSize="16sp"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <TextView
- android:id="@+id/owner_info"
- android:lineSpacingExtra="8dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="20dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="16sp"
- android:singleLine="false"
- android:visibility="invisible"
- android:textColor="@color/lockscreen_owner_info"
- />
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
deleted file mode 100644
index 4f6b62a..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device. It is the same for landscape
- and portrait.-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tabunlock="http://schemas.android.com/apk/res/com.android.tabunlock"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:id="@+id/root">
-
- <!-- top: status -->
- <RelativeLayout
- android:layout_height="0dip"
- android:layout_weight="0.42"
- android:layout_width="match_parent"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content"
- android:gravity="center">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_port"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="0.58"
- android:orientation="vertical"
- android:gravity="bottom">
-
- <TextView
- android:id="@+id/screenLocked"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="24dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginTop="12dip"
- android:drawablePadding="4dip"
- />
-
- <com.android.internal.widget.multiwaveview.GlowPadView
- android:id="@+id/unlock_widget"
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:gravity="center"
- android:focusable="true"
-
- android:targetDrawables="@array/lockscreen_targets_with_camera"
- android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
- android:directionDescriptions="@array/lockscreen_direction_descriptions"
- android:handleDrawable="@drawable/ic_lockscreen_handle"
- android:outerRingDrawable="@drawable/ic_lockscreen_outerring"
- android:outerRadius="@dimen/glowpadview_target_placement_radius"
- android:innerRadius="@dimen/glowpadview_inner_radius"
- android:snapMargin="@dimen/glowpadview_snap_margin"
- android:feedbackCount="1"
- android:vibrationDuration="20"
- android:glowRadius="@dimen/glowpadview_glow_radius"
- android:pointDrawable="@drawable/ic_lockscreen_glowdot"
- />
-
- <!-- emergency call button shown when sim is PUKd and tab_selector is hidden -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableLeft="@drawable/ic_emergency"
- android:layout_centerInParent="true"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="90dip"
- style="@style/Widget.Button.Transparent"
- android:drawablePadding="8dip"
- android:visibility="gone"
- />
- </LinearLayout>
-
-</LinearLayout>
-
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
deleted file mode 100644
index d5201ec..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_tab_unlock_land.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device.-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tabunlock="http://schemas.android.com/apk/res/com.android.tabunlock"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:id="@+id/root">
-
- <!-- left side: status and music -->
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_weight="0.42"
- android:layout_width="0dip"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_land"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_marginEnd="64dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <!-- right side -->
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_weight="0.58"
- android:layout_width="0dip"
- android:gravity="center_horizontal|center_vertical">
-
- <TextView
- android:id="@+id/screenLocked"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="center"
- android:layout_marginTop="12dip"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:drawablePadding="4dip"/>
-
- <com.android.internal.widget.multiwaveview.GlowPadView
- android:id="@+id/unlock_widget"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_rowSpan="7"
- android:layout_gravity="center_vertical|end"
- android:gravity="center"
- android:focusable="true"
-
- android:targetDrawables="@array/lockscreen_targets_with_camera"
- android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
- android:directionDescriptions="@array/lockscreen_direction_descriptions"
- android:handleDrawable="@drawable/ic_lockscreen_handle"
- android:outerRingDrawable="@drawable/ic_lockscreen_outerring"
- android:outerRadius="@dimen/glowpadview_target_placement_radius"
- android:innerRadius="@dimen/glowpadview_inner_radius"
- android:snapMargin="@dimen/glowpadview_snap_margin"
- android:feedbackCount="1"
- android:vibrationDuration="20"
- android:glowRadius="@dimen/glowpadview_glow_radius"
- android:pointDrawable="@drawable/ic_lockscreen_glowdot"
- />
-
- <!-- emergency call button shown when sim is PUKd and tab_selector is hidden -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="80dip"
- android:layout_marginBottom="80dip"
- android:layout_alignParentEnd="true"
- android:layout_alignParentBottom="true"
- android:drawableLeft="@drawable/ic_emergency"
- style="@style/Widget.Button.Transparent"
- android:drawablePadding="8dip"
- android:visibility="gone"/>
-
- </RelativeLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
deleted file mode 100644
index a71ef30..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_landscape.xml
+++ /dev/null
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the screen that shows the 9 circle unlock widget and instructs
- the user how to unlock their device, or make an emergency call. This
- is the portrait layout. -->
-
-<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- left side: status and music -->
- <RelativeLayout
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:layout_width="0dip"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content"
- android:layout_marginBottom="24dip">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_land"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_marginBottom="50dip"
- android:layout_marginEnd="64dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <!-- right side: lock pattern -->
- <RelativeLayout
- android:layout_weight="1"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:gravity="center_vertical|center_horizontal">
-
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:gravity="center_vertical|center_horizontal">
-
- <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
- android:layout_width="354dip"
- android:layout_height="354dip"
- android:layout_gravity="center_vertical"
- />
-
- <!-- Emergency and forgot pattern buttons. -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_below="@id/lockPattern"
- android:layout_alignStart="@id/lockPattern"
- android:layout_alignEnd="@id/lockPattern"
- android:layout_marginTop="28dip"
- style="?android:attr/buttonBarStyle"
- android:gravity="center"
- android:weightSum="2">
-
- <Button android:id="@+id/forgotPatternButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- style="?android:attr/buttonBarButtonStyle"
- android:drawableLeft="@drawable/lockscreen_forgot_password_button"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_forgot_pattern_button_text"
- android:visibility="gone"
- />
-
- <Button android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- style="?android:attr/buttonBarButtonStyle"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_emergency_call"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- </RelativeLayout>
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_width="530dip"
- android:layout_height="530dip"
- android:layout_centerInParent="true"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
-</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
diff --git a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml b/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
deleted file mode 100644
index 0c4a2c7..0000000
--- a/core/res/res/layout-sw600dp/keyguard_screen_unlock_portrait.xml
+++ /dev/null
@@ -1,150 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <!-- top: status -->
- <RelativeLayout
- android:layout_height="0dip"
- android:layout_weight="0.40"
- android:layout_width="match_parent"
- android:gravity="center">
-
- <RelativeLayout android:id="@+id/transport_bg_protect"
- android:layout_width="512dip"
- android:layout_height="wrap_content"
- android:gravity="center">
-
- <!-- Status -->
- <include layout="@layout/keyguard_screen_status_land"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="50dip"
- android:layout_marginTop="50dip"
- android:layout_marginEnd="64dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentStart="true"/>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="match_parent"
- android:layout_height="512dip"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
- <!-- bottom: lock pattern, emergency dialer and forgot pattern button -->
- <RelativeLayout
- android:layout_weight="0.60"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:gravity="center">
-
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:gravity="center">
-
- <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
- android:layout_width="354dip"
- android:layout_height="354dip"
- />
-
- <!-- Emergency and forgot pattern buttons. -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_below="@id/lockPattern"
- android:layout_alignStart="@id/lockPattern"
- android:layout_alignEnd="@id/lockPattern"
- style="?android:attr/buttonBarStyle"
- android:gravity="center"
- android:weightSum="2">
-
- <Button android:id="@+id/forgotPatternButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- style="?android:attr/buttonBarButtonStyle"
- android:drawableLeft="@drawable/lockscreen_forgot_password_button"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_forgot_pattern_button_text"
- android:visibility="gone"
- />
-
- <Button android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- style="?android:attr/buttonBarButtonStyle"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="8dip"
- android:text="@string/lockscreen_emergency_call"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- </RelativeLayout>
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_width="440dip"
- android:layout_height="440dip"
- android:layout_centerInParent="true"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
- </RelativeLayout>
-
-</com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
diff --git a/core/res/res/layout/keyguard_screen_glogin_unlock.xml b/core/res/res/layout/keyguard_screen_glogin_unlock.xml
deleted file mode 100644
index db920b4..0000000
--- a/core/res/res/layout/keyguard_screen_glogin_unlock.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:color/background_dark"
- >
- <ScrollView
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:layout_above="@+id/emergencyCallButton">
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
-
- <TextView
- android:id="@+id/topHeader"
- android:layout_width="match_parent"
- android:layout_height="64dip"
- android:layout_alignParentTop="true"
- android:layout_marginStart="4dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:gravity="center_vertical"
- android:drawableLeft="@drawable/ic_lock_idle_lock"
- android:drawablePadding="5dip"
- />
-
- <!-- spacer below header -->
- <View
- android:id="@+id/spacerTop"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_below="@id/topHeader"
- android:background="@drawable/divider_horizontal_dark"/>
-
- <TextView
- android:id="@+id/instructions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@+id/spacerTop"
- android:layout_marginTop="8dip"
- android:layout_marginStart="9dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:text="@android:string/lockscreen_glogin_instructions"
- />
-
- <EditText
- android:id="@+id/login"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/instructions"
- android:layout_marginTop="8dip"
- android:layout_marginStart="7dip"
- android:layout_marginEnd="7dip"
- android:hint="@android:string/lockscreen_glogin_username_hint"
- android:inputType="textEmailAddress"
- />
-
- <EditText
- android:id="@+id/password"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/login"
- android:layout_marginTop="15dip"
- android:layout_marginStart="7dip"
- android:layout_marginEnd="7dip"
- android:inputType="textPassword"
- android:hint="@android:string/lockscreen_glogin_password_hint"
- android:nextFocusRight="@+id/ok"
- android:nextFocusDown="@+id/ok"
- />
-
- <!-- ok below password, aligned to right of screen -->
- <Button
- android:id="@+id/ok"
- android:layout_width="85dip"
- android:layout_height="wrap_content"
- android:layout_below="@id/password"
- android:layout_marginTop="7dip"
- android:layout_marginEnd="7dip"
- android:layout_alignParentEnd="true"
- android:text="@android:string/lockscreen_glogin_submit_button"
- />
-
- </RelativeLayout>
- </ScrollView>
-
- <!-- spacer above emergency call -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginBottom="4dip"
-
- android:background="@drawable/divider_horizontal_dark"/>
-
- <!-- emergency call button at bottom center -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="4dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
-
-</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_lock.xml b/core/res/res/layout/keyguard_screen_lock.xml
deleted file mode 100644
index 8c178b1..0000000
--- a/core/res/res/layout/keyguard_screen_lock.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device. It is the same for landscape
- and portrait.-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:gravity="bottom"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- >
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginBottom="15dip"
- android:layout_marginStart="15dip"
- android:layout_marginEnd="15dip"
- android:paddingTop="20dip"
- android:paddingBottom="20dip"
- android:background="@android:drawable/popup_full_dark"
- >
-
- <!-- when sim is present -->
- <TextView android:id="@+id/headerSimOk1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
- <TextView android:id="@+id/headerSimOk2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
-
- <!-- when sim is missing / locked -->
- <TextView android:id="@+id/headerSimBad1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:text="@android:string/lockscreen_missing_sim_message"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
- <TextView android:id="@+id/headerSimBad2"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="7dip"
- android:layout_marginBottom="7dip"
- android:gravity="center"
- android:text="@android:string/lockscreen_missing_sim_instructions"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
-
- <!-- spacer after carrier info / sim messages -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:background="@android:drawable/divider_horizontal_dark"/>
-
- <!-- time and date -->
- <TextView android:id="@+id/time"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="34sp"/>
-
- <TextView android:id="@+id/date"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:textSize="18sp"/>
-
- <!-- spacer after time and date -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- battery info -->
- <LinearLayout android:id="@+id/batteryInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView android:id="@+id/batteryInfoIcon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:gravity="center"
- />
-
- <TextView android:id="@+id/batteryInfoText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:gravity="center"
- />
-
- </LinearLayout>
-
- <!-- spacer after battery info -->
- <View android:id="@+id/batteryInfoSpacer"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- next alarm info -->
-
- <LinearLayout android:id="@+id/nextAlarmInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:src="@android:drawable/ic_lock_idle_alarm"
- android:gravity="center"
- />
-
- <TextView android:id="@+id/nextAlarmText"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:gravity="center"
- />
- </LinearLayout>
-
- <!-- spacer after alarm info -->
- <View android:id="@+id/nextAlarmSpacer"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- android:background="@android:drawable/divider_horizontal_dark"/>
-
- <!-- lock icon with 'screen locked' message
- (shown when SIM card is present) -->
- <LinearLayout android:id="@+id/screenLockedInfo"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="6dip"
- android:baselineAligned="true"
- android:src="@android:drawable/ic_lock_idle_lock"
- android:gravity="center"
- />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="18sp"
- android:text="@android:string/lockscreen_screen_locked"
- android:gravity="center"
- />
- </LinearLayout>
-
- <!-- message about how to unlock
- (shown when SIM card is present) -->
- <TextView android:id="@+id/lockInstructions"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dip"
- android:gravity="center"
- android:textSize="14sp"/>
-
-
- <!-- emergency call button shown when sim is missing or PUKd -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="5dip"
- android:layout_marginTop="5dip"
- android:layout_gravity="center_horizontal"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="4dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
-
- </LinearLayout>
-</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_password_landscape.xml b/core/res/res/layout/keyguard_screen_password_landscape.xml
deleted file mode 100644
index 80d9d61..0000000
--- a/core/res/res/layout/keyguard_screen_password_landscape.xml
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device.-->
-<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:rowCount="8"
- android:id="@+id/root"
- android:clipChildren="false"
- android:rowOrderPreserved="false">
-
- <!-- Column 0 -->
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="8dip"
- android:layout_gravity="end"
- android:layout_rowSpan="2">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_foreground"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <TextView
- android:id="@+id/date"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:layout_below="@id/time"
- android:layout_marginTop="6dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- android:layout_marginTop="4dip"
- android:layout_gravity="end"
- />
-
- <TextView
- android:id="@+id/status1"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:layout_marginTop="4dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- <Space android:layout_gravity="fill" />
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:textColor="?android:attr/textColorSecondary"
- />
-
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_gravity="end"
- android:drawableLeft="@drawable/lockscreen_emergency_button"
- android:text="@string/lockscreen_emergency_call"
- style="?android:attr/buttonBarButtonStyle"
- android:drawablePadding="8dip"
- android:visibility="visible"
- />
-
- <!-- Column 1 -->
- <Space
- android:layout_width="16dip"
- android:layout_rowSpan="8"
- android:layout_gravity="fill_vertical" />
-
- <!-- Column 2 - password entry field and PIN keyboard -->
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="270dip"
- android:layout_gravity="center_vertical"
- android:background="@drawable/lockscreen_password_field_dark">
-
- <EditText android:id="@+id/passwordEntry"
- android:layout_height="wrap_content"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:gravity="center"
- android:layout_gravity="center_vertical"
- android:singleLine="true"
- android:textStyle="normal"
- android:inputType="textPassword"
- android:textSize="24sp"
- android:minEms="8"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:background="@null"
- android:textColor="?android:attr/textColorPrimary"
- android:imeOptions="flagForceAscii|flagNoFullscreen|actionDone"
- />
-
- <!-- This delete button is only visible for numeric PIN entry -->
- <ImageButton android:id="@+id/pinDel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@android:drawable/ic_input_delete"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- <ImageView android:id="@+id/switch_ime_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_lockscreen_ime"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- <!-- Numeric keyboard -->
- <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
- android:layout_width="270dip"
- android:layout_height="wrap_content"
- android:layout_marginStart="4dip"
- android:layout_marginEnd="4dip"
- android:background="#40000000"
- android:layout_marginTop="5dip"
- android:keyBackground="@*android:drawable/btn_keyboard_key_ics"
- android:visibility="gone"
- android:layout_rowSpan="7"
- android:clickable="true"
- />
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="6"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_row="0"
- android:layout_column="2"
- android:layout_rowSpan="8"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
-</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_password_portrait.xml b/core/res/res/layout/keyguard_screen_password_portrait.xml
deleted file mode 100644
index 3d61bae..0000000
--- a/core/res/res/layout/keyguard_screen_password_portrait.xml
+++ /dev/null
@@ -1,231 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center_horizontal">
-
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginBottom="18dip"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:layout_gravity="end">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@*android:color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_foreground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- </LinearLayout>
-
- <TextView
- android:id="@+id/status1"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- android:paddingBottom="4dip"
- />
-
- <!-- Password entry field -->
- <!-- Note: the entire container is styled to look like the edit field,
- since the backspace/IME switcher looks better inside -->
- <LinearLayout
- android:layout_gravity="center_vertical|fill_horizontal"
- android:orientation="horizontal"
- android:background="@drawable/lockscreen_password_field_dark"
- android:layout_marginStart="16dip"
- android:layout_marginEnd="16dip">
-
- <EditText android:id="@+id/passwordEntry"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:layout_gravity="center_vertical"
- android:singleLine="true"
- android:textStyle="normal"
- android:inputType="textPassword"
- android:textSize="36sp"
- android:background="@null"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="#ffffffff"
- android:imeOptions="flagForceAscii|actionDone"
- />
-
- <!-- This delete button is only visible for numeric PIN entry -->
- <ImageButton android:id="@+id/pinDel"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@android:drawable/ic_input_delete"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center_vertical"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- <ImageView android:id="@+id/switch_ime_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_lockscreen_ime"
- android:clickable="true"
- android:padding="8dip"
- android:layout_gravity="center"
- android:background="?android:attr/selectableItemBackground"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- <!-- Numeric keyboard -->
- <com.android.internal.widget.PasswordEntryKeyboardView android:id="@+id/keyboard"
- android:layout_width="match_parent"
- android:layout_marginStart="4dip"
- android:layout_marginEnd="4dip"
- android:paddingTop="4dip"
- android:paddingBottom="4dip"
- android:background="#40000000"
- android:keyBackground="@*android:drawable/btn_keyboard_key_ics"
- android:visibility="gone"
- android:clickable="true"
- />
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:paddingTop="4dip"
- />
-
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dip"
- android:layout_gravity="center_horizontal"
- android:drawableLeft="@*android:drawable/lockscreen_emergency_button"
- style="?android:attr/buttonBarButtonStyle"
- android:drawablePadding="4dip"
- android:text="@*android:string/lockscreen_emergency_call"
- android:visibility="gone"
- />
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="3"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_row="3"
- android:layout_column="0"
- android:layout_rowSpan="2"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
-</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml b/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
deleted file mode 100644
index 3738766..0000000
--- a/core/res/res/layout/keyguard_screen_sim_pin_landscape.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@android:color/background_dark"
- >
-
- <!-- header text ('Enter Pin Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_above="@+id/carrier"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="30dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textSize="24sp"
- />
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_above="@+id/pinDisplayGroup"
- android:layout_marginTop="9dip"
- android:gravity="start|bottom"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <!-- displays dots as user enters pin -->
- <LinearLayout android:id="@+id/pinDisplayGroup"
- android:orientation="horizontal"
- android:layout_centerInParent="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:addStatesFromChildren="true"
- android:gravity="center_vertical"
- android:baselineAligned="false"
- android:paddingEnd="0dip"
- android:layout_marginEnd="30dip"
- android:layout_marginStart="30dip"
- android:background="@android:drawable/edit_text"
- >
-
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:background="@null"
- android:textSize="32sp"
- android:inputType="textPassword"
- />
-
- <ImageButton android:id="@+id/backspace"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginTop="2dip"
- android:layout_marginEnd="2dip"
- android:layout_marginBottom="2dip"
- android:gravity="center"
- />
-
- </LinearLayout>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:layout_marginEnd="8dip">
-
- <Button android:id="@+id/emergencyCallButton"
- android:text="@android:string/lockscreen_emergency_call"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginEnd="8dip"
- android:textSize="18sp"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="4dip"
- />
-
- <Button android:id="@+id/ok"
- android:text="@android:string/ok"
- android:layout_alignParentBottom="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:textSize="18sp"
- />
- </LinearLayout>
-
-</RelativeLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml b/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
deleted file mode 100644
index 20c2142..0000000
--- a/core/res/res/layout/keyguard_screen_sim_pin_portrait.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:color/background_dark"
- android:gravity="center_horizontal">
-
- <LinearLayout android:id="@+id/topDisplayGroup"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- header text ('Enter Pin Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="9dip"
- android:gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- <!-- password entry -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters pin -->
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textColor="@android:color/primary_text_holo_light"
- android:textStyle="bold"
- android:inputType="textPassword"
- />
-
- <ImageButton android:id="@+id/backspace"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
-
- </LinearLayout>
-
- <include
- android:id="@+id/keyPad"
- layout="@android:layout/twelve_key_entry"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/topDisplayGroup"
- android:layout_marginTop="10dip"
- />
-
- <!-- spacer below keypad -->
- <View
- android:id="@+id/spacerBottom"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="6dip"
- android:layout_above="@id/emergencyCallButton"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- The emergency button should take the rest of the space and be centered vertically -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical">
-
- <!-- emergency call button -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="4dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
- </LinearLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml b/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
deleted file mode 100644
index fd6dc26..0000000
--- a/core/res/res/layout/keyguard_screen_sim_puk_landscape.xml
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@android:color/background_dark"
- >
-
- <LinearLayout android:id="@+id/topDisplayGroup"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- header text ('Enter Puk Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="9dip"
- android:gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_marginEnd="10dip"
- android:layout_marginStart="10dip">
- <TextView android:id="@+id/enter_puk"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:text="@android:string/keyguard_password_enter_puk_prompt"
- android:textSize="30sp"
- android:layout_marginBottom="10dip"/>
- <TextView android:id="@+id/enter_pin"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:text="@android:string/keyguard_password_enter_pin_prompt"
- android:textSize="30sp"
- android:layout_marginTop="10dip"/>
- </LinearLayout>
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:paddingEnd="0dip"
- android:layout_marginEnd="10dip"
- android:layout_marginStart="10dip">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters puk -->
- <TextView android:id="@+id/pukDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textStyle="bold"
- android:inputType="textPassword"
- />
-
- <ImageButton android:id="@+id/pukDel"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
-
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters new pin -->
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:textColor="@android:color/primary_text_holo_light"
- android:textStyle="bold"
- android:inputType="textPassword"
- android:hint="@android:string/keyguard_password_enter_pin_prompt"
- />
-
- <ImageButton android:id="@+id/pinDel"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_alignParentBottom="true"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:layout_marginEnd="8dip">
-
- <Button android:id="@+id/emergencyCallButton"
- android:text="@android:string/lockscreen_emergency_call"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginEnd="8dip"
- android:textSize="18sp"
- android:drawableLeft="@drawable/ic_emergency"
- android:drawablePadding="4dip"
- />
-
- <Button android:id="@+id/ok"
- android:text="@android:string/ok"
- android:layout_alignParentBottom="true"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:textSize="18sp"
- />
- </LinearLayout>
-
-</RelativeLayout>
diff --git a/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml b/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml
deleted file mode 100644
index 5397e62..0000000
--- a/core/res/res/layout/keyguard_screen_sim_puk_portrait.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@android:color/background_dark"
- android:gravity="center_horizontal">
-
- <LinearLayout android:id="@+id/topDisplayGroup"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <!-- header text ('Enter Puk Code') -->
- <TextView android:id="@+id/headerText"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:textAppearance="?android:attr/textAppearanceLarge"/>
-
- <!-- Carrier info -->
- <TextView android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="9dip"
- android:gravity="center"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_weight="1"
- android:layout_height="match_parent"
- android:paddingEnd="0dip"
- android:layout_marginEnd="10dip"
- android:layout_marginStart="10dip">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters puk -->
- <EditText android:id="@+id/pukDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textStyle="bold"
- android:inputType="textPassword"
- android:textColor="#000"
- android:hint="@android:string/keyguard_password_enter_puk_prompt"
- />
-
- <ImageButton android:id="@+id/pukDel"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
-
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginEnd="6dip"
- android:layout_marginStart="6dip"
- android:gravity="center_vertical"
- android:background="@android:drawable/edit_text">
-
- <!-- displays dots as user enters new pin -->
- <EditText android:id="@+id/pinDisplay"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:maxLines="1"
- android:textStyle="bold"
- android:inputType="textPassword"
- android:textColor="#000"
- android:hint="@android:string/keyguard_password_enter_pin_prompt"
- />
-
- <ImageButton android:id="@+id/pinDel"
- android:src="@android:drawable/ic_input_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="-3dip"
- android:layout_marginBottom="-3dip"
- />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
- <include
- android:id="@+id/keyPad"
- layout="@android:layout/twelve_key_entry"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/topDisplayGroup"
- android:layout_marginTop="10dip"
- />
-
- <!-- spacer below keypad -->
- <View
- android:id="@+id/spacerBottom"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_marginTop="6dip"
- android:layout_above="@id/emergencyCallButton"
- android:background="@android:drawable/divider_horizontal_dark"
- />
-
- <!-- The emergency button should take the rest of the space and be centered vertically -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:gravity="center"
- android:orientation="vertical">
-
- <!-- emergency call button -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:drawableLeft="@android:drawable/ic_emergency"
- android:drawablePadding="4dip"
- android:text="@android:string/lockscreen_emergency_call"
- />
- </LinearLayout>
-
-</LinearLayout>
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock.xml b/core/res/res/layout/keyguard_screen_tab_unlock.xml
deleted file mode 100644
index 54381ee..0000000
--- a/core/res/res/layout/keyguard_screen_tab_unlock.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device. It is the same for landscape
- and portrait.-->
-<GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center_horizontal">
-
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginTop="@dimen/keyguard_lockscreen_status_line_clockfont_top_margin"
- android:layout_marginBottom="12dip"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:layout_gravity="end">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_foreground"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- </LinearLayout>
-
- <TextView
- android:id="@+id/status1"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- <Space android:layout_gravity="fill" />
-
- <!-- emergency call button shown when sim is PUKd and tab_selector is hidden -->
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="4dip"
- android:layout_marginEnd="16dip"
- android:layout_gravity="end"
- android:drawableLeft="@*android:drawable/lockscreen_emergency_button"
- style="?android:attr/buttonBarButtonStyle"
- android:drawablePadding="4dip"
- android:text="@*android:string/lockscreen_emergency_call"
- android:visibility="gone"
- />
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="302dip">
-
- <com.android.internal.widget.multiwaveview.GlowPadView
- android:id="@+id/unlock_widget"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentBottom="true"
- android:gravity="top"
- android:focusable="true"
-
- android:targetDrawables="@array/lockscreen_targets_with_camera"
- android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
- android:directionDescriptions="@array/lockscreen_direction_descriptions"
- android:handleDrawable="@drawable/ic_lockscreen_handle"
- android:outerRingDrawable="@drawable/ic_lockscreen_outerring"
- android:outerRadius="@dimen/glowpadview_target_placement_radius"
- android:innerRadius="@dimen/glowpadview_inner_radius"
- android:snapMargin="@dimen/glowpadview_snap_margin"
- android:feedbackCount="1"
- android:vibrationDuration="20"
- android:glowRadius="@dimen/glowpadview_glow_radius"
- android:pointDrawable="@drawable/ic_lockscreen_glowdot"
- />
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="12dip"
- android:gravity="center_horizontal"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:textColor="?android:attr/textColorSecondary"
- />
-
- </RelativeLayout>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- style="?android:attr/buttonBarStyle"
- android:gravity="center"
- android:weightSum="2">
-
- <Button android:id="@+id/emergencyCallButton"
- android:layout_gravity="center_horizontal"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- style="?android:attr/buttonBarButtonStyle"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:text="@*android:string/lockscreen_emergency_call"
- android:drawableLeft="@*android:drawable/lockscreen_emergency_button"
- android:drawablePadding="0dip"
- android:visibility="gone"
- />
-
- </LinearLayout>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="4"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
-</GridLayout>
-
diff --git a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml b/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
deleted file mode 100644
index 7ef9d8b..0000000
--- a/core/res/res/layout/keyguard_screen_tab_unlock_land.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the general lock screen which shows information about the
- state of the device, as well as instructions on how to get past it
- depending on the state of the device.-->
-<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:rowCount="7"
- android:id="@+id/root"
- android:clipChildren="false">
-
- <!-- Column 0 -->
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginTop="80dip"
- android:layout_marginBottom="8dip"
- android:layout_gravity="end">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_foreground"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <TextView
- android:id="@+id/date"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:layout_marginTop="6dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- android:layout_marginTop="4dip"
- android:layout_gravity="end"
- />
-
- <TextView
- android:id="@+id/status1"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:layout_marginTop="4dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- <Space android:layout_gravity="fill" />
-
- <TextView
- android:id="@+id/carrier"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:layout_marginBottom="12dip"
- android:gravity="end"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:textColor="?android:attr/textColorSecondary"
- />
-
- <Button
- android:id="@+id/emergencyCallButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="end"
- android:drawableLeft="@*android:drawable/lockscreen_emergency_button"
- android:text="@*android:string/lockscreen_emergency_call"
- style="?android:attr/buttonBarButtonStyle"
- android:drawablePadding="8dip"
- android:visibility="gone"
- />
-
- <!-- Column 1 -->
- <Space android:layout_width="64dip" android:layout_rowSpan="7" />
-
- <!-- Column 2 -->
- <com.android.internal.widget.multiwaveview.GlowPadView
- android:id="@+id/unlock_widget"
- android:layout_width="302dip"
- android:layout_height="match_parent"
- android:layout_rowSpan="7"
- android:gravity="start|center_vertical"
- android:focusable="true"
-
- android:targetDrawables="@array/lockscreen_targets_with_camera"
- android:targetDescriptions="@array/lockscreen_target_descriptions_with_camera"
- android:directionDescriptions="@array/lockscreen_direction_descriptions"
- android:handleDrawable="@drawable/ic_lockscreen_handle"
- android:outerRingDrawable="@drawable/ic_lockscreen_outerring"
- android:outerRadius="@dimen/glowpadview_target_placement_radius"
- android:innerRadius="@dimen/glowpadview_inner_radius"
- android:snapMargin="@dimen/glowpadview_snap_margin"
- android:feedbackCount="1"
- android:vibrationDuration="20"
- android:glowRadius="@dimen/glowpadview_glow_radius"
- android:pointDrawable="@drawable/ic_lockscreen_glowdot"
- />
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="5"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
-</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_unlock_landscape.xml b/core/res/res/layout/keyguard_screen_unlock_landscape.xml
deleted file mode 100644
index 27f6629..0000000
--- a/core/res/res/layout/keyguard_screen_unlock_landscape.xml
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the screen that shows the 9 circle unlock widget and instructs
- the user how to unlock their device, or make an emergency call. This
- is the portrait layout. -->
-
-<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/root"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:rowCount="7">
-
- <!-- Column 0: Time, date and status -->
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginTop="8dip"
- android:layout_marginBottom="12dip"
- android:layout_gravity="end">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:layout_marginBottom="6dip"
- android:textColor="@color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:layout_marginBottom="6dip"
- android:layout_alignStart="@id/timeDisplayBackground"
- android:layout_alignTop="@id/timeDisplayBackground"
- android:textColor="@color/lockscreen_clock_foreground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <TextView
- android:id="@+id/date"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:layout_gravity="end"
- android:drawablePadding="4dip"
- />
-
- <TextView
- android:id="@+id/status1"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <Space android:layout_gravity="fill" />
-
- <TextView android:id="@+id/carrier"
- android:layout_width="0dip"
- android:layout_gravity="fill_horizontal"
- android:gravity="end"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <LinearLayout
- style="?android:attr/buttonBarStyle"
- android:orientation="vertical"
- android:layout_gravity="end">
-
- <Button android:id="@+id/emergencyCallButton"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_gravity="end"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:text="@string/lockscreen_emergency_call"
- android:drawableLeft="@drawable/lockscreen_emergency_button"
- android:drawablePadding="0dip"
- />
-
- <Button android:id="@+id/forgotPatternButton"
- style="?android:attr/buttonBarButtonStyle"
- android:layout_gravity="end"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:text="@string/lockscreen_forgot_pattern_button_text"
- android:drawableLeft="@drawable/lockscreen_forgot_password_button"
- android:drawablePadding="0dip"
- />
- </LinearLayout>
-
- <!-- Column 1: lock pattern -->
-
- <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="8dip"
- android:layout_marginEnd="8dip"
- android:layout_marginBottom="8dip"
- android:layout_marginStart="8dip"
- android:layout_rowSpan="7"/>
-
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="5"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_row="0"
- android:layout_column="1"
- android:layout_rowSpan="7"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_marginStart="8dip"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
-</GridLayout>
diff --git a/core/res/res/layout/keyguard_screen_unlock_portrait.xml b/core/res/res/layout/keyguard_screen_unlock_portrait.xml
deleted file mode 100644
index de94451..0000000
--- a/core/res/res/layout/keyguard_screen_unlock_portrait.xml
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License")
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- This is the screen that shows the 9 circle unlock widget and instructs
- the user how to unlock their device, or make an emergency call. This
- is the portrait layout. -->
-<GridLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center_horizontal">
-
- <com.android.internal.widget.DigitalClock android:id="@+id/time"
- android:layout_marginTop="@dimen/keyguard_lockscreen_status_line_clockfont_top_margin"
- android:layout_marginBottom="@dimen/keyguard_lockscreen_status_line_clockfont_bottom_margin"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:layout_gravity="end">
-
- <!-- Because we can't have multi-tone fonts, we render two TextViews, one on
- top of the other. Hence the redundant layout... -->
- <TextView android:id="@+id/timeDisplayBackground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_background"
- />
-
- <TextView android:id="@+id/timeDisplayForeground"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="none"
- android:textSize="@dimen/keyguard_lockscreen_clock_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/lockscreen_clock_foreground"
- />
-
- </com.android.internal.widget.DigitalClock>
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin">
-
- <TextView
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- />
-
- <TextView
- android:id="@+id/alarm_status"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dip"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- </LinearLayout>
-
-
- <TextView
- android:id="@+id/status1"
- android:layout_gravity="end"
- android:layout_marginEnd="@dimen/keyguard_lockscreen_status_line_font_right_margin"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:drawablePadding="4dip"
- />
-
- <Space android:layout_gravity="fill" />
-
- <!-- We need MATCH_PARENT here only to force the size of the parent to be passed to
- the pattern view for it to compute its size. This is an unusual case, caused by
- LockPatternView's requirement to maintain a square aspect ratio based on the width
- of the screen. -->
- <com.android.internal.widget.LockPatternView
- android:id="@+id/lockPattern"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginEnd="8dip"
- android:layout_marginBottom="4dip"
- android:layout_marginStart="8dip"
- android:layout_gravity="center_horizontal"
- />
-
- <TextView
- android:id="@+id/carrier"
- android:layout_gravity="center_horizontal"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <!-- Footer: an emergency call button and an initially hidden "Forgot pattern" button -->
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="match_parent"
- style="?android:attr/buttonBarStyle"
- android:gravity="center"
- android:weightSum="2">
-
- <Button android:id="@+id/emergencyCallButton"
- android:layout_gravity="center_horizontal"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- style="?android:attr/buttonBarButtonStyle"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:text="@string/lockscreen_emergency_call"
- android:drawableLeft="@drawable/lockscreen_emergency_button"
- android:drawablePadding="0dip"
- />
-
- <Button android:id="@+id/forgotPatternButton"
- android:layout_gravity="center_horizontal"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- style="?android:attr/buttonBarButtonStyle"
- android:textSize="@dimen/keyguard_lockscreen_status_line_font_size"
- android:text="@string/lockscreen_forgot_pattern_button_text"
- android:drawableLeft="@drawable/lockscreen_forgot_password_button"
- android:drawablePadding="0dip"
- />
-
- </LinearLayout>
-
- <!-- Music transport control -->
- <include android:id="@+id/transport"
- layout="@layout/keyguard_transport_control"
- android:layout_row="0"
- android:layout_column="0"
- android:layout_rowSpan="4"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_width="0dip"
- android:layout_height="0dip"
- />
-
- <!-- Area to overlay FaceLock -->
- <RelativeLayout
- android:id="@+id/face_unlock_area_view"
- android:visibility="invisible"
- android:layout_row="4"
- android:layout_column="0"
- android:layout_rowSpan="1"
- android:layout_columnSpan="1"
- android:layout_gravity="fill"
- android:layout_marginBottom="4dip"
- android:layout_width="0dip"
- android:layout_height="0dip"
- android:background="@drawable/intro_bg">
-
- <View
- android:id="@+id/spotlightMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/facelock_spotlight_mask"
- />
-
- <ImageView
- android:id="@+id/cancel_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5dip"
- android:layout_alignParentTop="true"
- android:layout_alignParentEnd="true"
- android:src="@drawable/ic_facial_backup"
- />
-
- </RelativeLayout>
-
-</GridLayout>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index 6ccc590..05db7a0 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -321,7 +321,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Ermöglicht der App, die Benutzeroberfläche zur Bestätigung der vollständigen Sicherung zu starten. Kann nicht von jeder App verwendet werden."</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"Nicht autorisierte Fenster anzeigen"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Ermöglicht der App die Erstellung von Fenstern, die von der Benutzeroberfläche des internen Systems verwendet werden. Nicht für normale Apps vorgesehen."</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"Über andere Apps ziehen"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"Über andere Apps zeichnen"</string>
<string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Ermöglicht der App, über andere Apps oder Teile der Benutzeroberfläche zu zeichnen. Dies kann sich auf die Oberfläche in jeder App auswirken oder die erwartete Darstellung in anderen Apps verändern."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"Allgemeine Animationsgeschwindigkeit einstellen"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Ermöglicht der App, die allgemeine Animationsgeschwindigkeit (langsamere oder schnellere Animationen) jederzeit anzupassen."</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 716f0e2..2c802af 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1095,8 +1095,7 @@
<string name="volume_icon_description_notification" msgid="7044986546477282274">"Notification volume"</string>
<string name="ringtone_default" msgid="3789758980357696936">"Default ringtone"</string>
<string name="ringtone_default_with_actual" msgid="8129563480895990372">"Default ringtone (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
- <!-- no translation found for ringtone_silent (7937634392408977062) -->
- <skip />
+ <string name="ringtone_silent" msgid="7937634392408977062">"None"</string>
<string name="ringtone_picker_title" msgid="3515143939175119094">"Ringtones"</string>
<string name="ringtone_unknown" msgid="5477919988701784788">"Unknown ringtone"</string>
<plurals name="wifi_available">
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 8ab9d523..560769d 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1040,7 +1040,7 @@
<string name="loading" msgid="7933681260296021180">"Wczytywanie…"</string>
<string name="capital_on" msgid="1544682755514494298">"Wł"</string>
<string name="capital_off" msgid="6815870386972805832">"Wył"</string>
- <string name="whichApplication" msgid="4533185947064773386">"Zakończ czynność przez..."</string>
+ <string name="whichApplication" msgid="4533185947064773386">"Wykonaj czynność przez..."</string>
<string name="alwaysUse" msgid="4583018368000610438">"Domyślne dla tej czynności"</string>
<string name="clearDefaultHintMsg" msgid="3252584689512077257">"Wyczyść wartości domyślne w: Ustawienia systemu > Aplikacje > Pobrane."</string>
<string name="chooseActivity" msgid="7486876147751803333">"Wybierz czynność"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index b8de45c..ddf2863 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -246,10 +246,10 @@
<string name="permlab_sendSmsNoConfirmation" msgid="4781483105951730228">"skicka SMS utan bekräftelse"</string>
<string name="permdesc_sendSmsNoConfirmation" msgid="402569800862935907">"Tillåter att appen skickar SMS. Detta kan leda till oväntade avgifter. Skadliga appar kan skicka meddelanden utan ditt godkännande vilket kan kosta pengar."</string>
<string name="permlab_readSms" msgid="8745086572213270480">"läsa dina textmeddelanden (SMS eller MMS)"</string>
- <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Tillåter att appen läser SMS som sparats på pekdatorn eller på SIM-kortet. Med den här behörigheten tillåts appen att läsa alla SMS oavsett innehåll eller sekretess."</string>
+ <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Tillåter att appen läser SMS som sparats på surfplattan eller på SIM-kortet. Med den här behörigheten tillåts appen att läsa alla SMS oavsett innehåll eller sekretess."</string>
<string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Tillåter att appen läser SMS som sparats på mobilen eller på SIM-kortet. Med den här behörigheten tillåts appen att läsa alla SMS oavsett innehåll eller sekretess."</string>
<string name="permlab_writeSms" msgid="3216950472636214774">"redigera dina textmeddelanden (SMS eller MMS)"</string>
- <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Tillåter att appen skriver till SMS som lagras på pekdatorn eller SIM-kortet. Skadliga appar kan radera dina meddelanden."</string>
+ <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Tillåter att appen skriver till SMS som lagras på surfplattan eller SIM-kortet. Skadliga appar kan radera dina meddelanden."</string>
<string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Tillåter att appen skriver till SMS som lagras på mobilen eller SIM-kortet. Skadliga appar kan radera dina meddelanden."</string>
<string name="permlab_receiveWapPush" msgid="5991398711936590410">"ta emot textmeddelanden (WAP)"</string>
<string name="permdesc_receiveWapPush" msgid="748232190220583385">"Tillåter att appen tar emot och hanterar WAP-meddelanden. Med den här behörigheten kan appen övervaka eller ta bort meddelanden som skickats till dig utan att visa dem för dig."</string>
@@ -330,7 +330,7 @@
<string name="permlab_freezeScreen" msgid="4708181184441880175">"frysa skärmen"</string>
<string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tillåter att appen tillfälligt fryser skärmen för övergång till helskärm."</string>
<string name="permlab_injectEvents" msgid="1378746584023586600">"trycka på knappar och styrknappar"</string>
- <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tillåter att appen levererar egna inmatningshändelser (knapptryckningar osv.) till andra appar. Skadliga appar kan använda detta för att kapa pekdatorn."</string>
+ <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tillåter att appen levererar egna inmatningshändelser (knapptryckningar osv.) till andra appar. Skadliga appar kan använda detta för att kapa surfplattan."</string>
<string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Tillåter att appen levererar egna inmatningshändelser (knapptryckningar osv.) till andra appar. Skadliga appar kan använda detta för att kapa mobilen."</string>
<string name="permlab_readInputState" msgid="469428900041249234">"registrera vad du skriver och vilka åtgärder du vidtar"</string>
<string name="permdesc_readInputState" msgid="8387754901688728043">"Tillåter att appen övervakar knapparna som du trycker på, till och med när du använder andra appar (till exempel när du anger ett lösenord). Ska inte behövas för vanliga appar."</string>
@@ -357,7 +357,7 @@
<string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"skicka Linux-signaler till appar"</string>
<string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Tillåter att appen begär att den angivna signalen skickas till alla beständiga processer."</string>
<string name="permlab_persistentActivity" msgid="8841113627955563938">"se till att appen alltid körs"</string>
- <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Tillåter att delar av appen läggs beständigt i minnet. Detta kan innebära att det tillgängliga minnet för andra appar begränsas, vilket gör pekdatorn långsam."</string>
+ <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Tillåter att delar av appen läggs beständigt i minnet. Detta kan innebära att det tillgängliga minnet för andra appar begränsas, vilket gör surfplattan långsam."</string>
<string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Tillåter att delar av appen läggs beständigt i minnet. Detta kan innebära att det tillgängliga minnet för andra appar begränsas, vilket gör mobilen långsam."</string>
<string name="permlab_deletePackages" msgid="184385129537705938">"ta bort appar"</string>
<string name="permdesc_deletePackages" msgid="7411480275167205081">"Tillåter att appen tar bort Android-paket. Skadliga appar kan använda detta för att ta bort viktiga appar."</string>
@@ -375,15 +375,15 @@
<string name="permlab_movePackage" msgid="3289890271645921411">"flytta appresurser"</string>
<string name="permdesc_movePackage" msgid="319562217778244524">"Tillåter att appen flyttar appresurser från interna till externa medier och tvärtom."</string>
<string name="permlab_readLogs" msgid="6615778543198967614">"läsa känsliga loggdata"</string>
- <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Tillåter att appen läser från systemets olika loggfiler. Det innebär att appen kan upptäcka allmän information om vad du gör med pekdatorn, vilket kan inkludera personlig eller privat information."</string>
+ <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Tillåter att appen läser från systemets olika loggfiler. Det innebär att appen kan upptäcka allmän information om vad du gör med surfplattan, vilket kan inkludera personlig eller privat information."</string>
<string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Tillåter att appen läser från systemets olika loggfiler. Det innebär att appen kan upptäcka allmän information om vad du gör med mobilen, vilket kan inkludera personlig eller privat information."</string>
<string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"använda alla medieavkodare för uppspelning"</string>
<string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Tillåter att appen använder installerade medieavkodare för att avkoda media för uppspelning."</string>
<string name="permlab_diagnostic" msgid="8076743953908000342">"läsa/skriva till resurser som ägs av diag"</string>
<string name="permdesc_diagnostic" msgid="6608295692002452283">"Tillåter att appen läser och skriver till en resurs som ägs av diag-gruppen, till exempel filer i /dev. Detta kan eventuellt påverka systemets stabilitet och säkerhet. Detta bör ENDAST användas av tillverkaren eller operatören för maskinvaruspecifik diagnostik."</string>
<string name="permlab_changeComponentState" msgid="6335576775711095931">"aktivera eller inaktivera appkomponenter"</string>
- <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Tillåter att appen ändrar inställningen för om en komponent i en annan app ska aktiveras eller inte. Skadliga appar kan använda detta för att inaktivera viktiga funktioner i pekdatorn. Var försiktig med behörigheten, eftersom appkomponenter kan bli oanvändbara, inkonsekventa eller instabila."</string>
- <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Tillåter att appen ändrar inställningen för om en komponent i en annan app ska aktiveras eller inte. Skadliga appar kan använda detta för att inaktivera viktiga funktioner i pekdatorn. Var försiktig med behörigheten, eftersom programkomponenter kan bli oanvändbara, inkonsekventa eller instabila."</string>
+ <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Tillåter att appen ändrar inställningen för om en komponent i en annan app ska aktiveras eller inte. Skadliga appar kan använda detta för att inaktivera viktiga funktioner i surfplattan. Var försiktig med behörigheten, eftersom appkomponenter kan bli oanvändbara, inkonsekventa eller instabila."</string>
+ <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Tillåter att appen ändrar inställningen för om en komponent i en annan app ska aktiveras eller inte. Skadliga appar kan använda detta för att inaktivera viktiga funktioner i surfplattan. Var försiktig med behörigheten, eftersom programkomponenter kan bli oanvändbara, inkonsekventa eller instabila."</string>
<string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"bevilja eller återkalla behörighet"</string>
<string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Tillåter att en app beviljar eller återkallar specifik behörighet, för sig själv eller andra appar. Skadlig programvara kan utnyttja detta för att få åtkomst till funktioner som du inte har beviljat behörighet till."</string>
<string name="permlab_setPreferredApplications" msgid="8463181628695396391">"ange önskade appar"</string>
@@ -395,16 +395,16 @@
<string name="permlab_writeGservices" msgid="2149426664226152185">"ändra kartan för Googles tjänster"</string>
<string name="permdesc_writeGservices" msgid="1287309437638380229">"Tillåter att appen ändrar kartan för Googles tjänster. Används inte av vanliga appar."</string>
<string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"köra vid start"</string>
- <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Tillåter att appen startar automatiskt när systemet har startats om. Detta kan innebära att det tar längre tid att starta pekdatorn och att pekdatorn blir långsammare i och med att appen hela tiden körs i bakgrunden."</string>
+ <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Tillåter att appen startar automatiskt när systemet har startats om. Detta kan innebära att det tar längre tid att starta surfplattan och att surfplattan blir långsammare i och med att appen hela tiden körs i bakgrunden."</string>
<string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Tillåter att appen startar automatiskt när systemet har startats om. Detta kan innebära att det tar längre tid att starta mobilen och att mobilen blir långsammare i och med att appen hela tiden körs i bakgrunden."</string>
<string name="permlab_broadcastSticky" msgid="7919126372606881614">"Skicka sticky broadcast"</string>
<string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Tillåter att appen skickar sticky broadcasts, som finns kvar när sändningen är slut. Vid intensiv användning kan mobilen bli långsam eller instabil eftersom minnet överbelastas."</string>
<string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Tillåter att appen skickar sticky broadcast, som finns kvar när sändningen är slut. Vid intensiv användning kan mobilen bli långsam eller instabil eftersom minnet överbelastas."</string>
<string name="permlab_readContacts" msgid="8348481131899886131">"läsa dina kontakter"</string>
- <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Tillåter att appen läser kontaktuppgifter som sparats på pekdatorn, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appen att spara kontaktuppgifter. Skadliga appar kan dela uppgifterna med andra utan din vetskap."</string>
+ <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Tillåter att appen läser kontaktuppgifter som sparats på surfplattan, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appen att spara kontaktuppgifter. Skadliga appar kan dela uppgifterna med andra utan din vetskap."</string>
<string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Tillåter att appen läser kontaktuppgifter som sparats på mobilen, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appen att spara kontaktuppgifter. Skadliga appar kan dela uppgifterna med andra utan din vetskap."</string>
<string name="permlab_writeContacts" msgid="5107492086416793544">"ändra kontakterna"</string>
- <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Tillåter att appen ändrar kontaktuppgifter som sparats på pekdatorn, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appar att ta bort kontaktuppgifter."</string>
+ <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Tillåter att appen ändrar kontaktuppgifter som sparats på surfplattan, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appar att ta bort kontaktuppgifter."</string>
<string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Tillåter att appen ändrar kontaktuppgifter som sparats på mobilen, inklusive information om hur ofta du har ringt, skickat e-post till eller på andra sätt kommunicerat med specifika personer. Med den här behörigheten tillåts appar att ta bort kontaktuppgifter."</string>
<string name="permlab_readCallLog" msgid="3478133184624102739">"läs samtalslogg"</string>
<string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Tillåter att appen läser pekdatorns samtalslista, inklusive uppgifter om inkommande och utgående samtal. Med den här behörigheten tillåts appen att spara samtalshistoriken. Skadliga appar kan dela uppgifterna med andra utan din vetskap."</string>
@@ -421,10 +421,10 @@
<string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skriv till mitt sociala flöde"</string>
<string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Tillåter att appen visar sociala uppdateringar från dina vänner. Var försiktig när du delar information – med den här behörigheten tillåts appen att generera meddelanden som kan se ut att komma från en vän. Observera att den här behörigheten kanske inte är tillämplig på alla sociala nätverk."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"läsa kalenderuppgifter plus konfidentiell information"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Tillåter att appen läser alla kalenderuppgifter som sparats på pekdatorn, inklusive dina vänners eller kollegors uppgifter. Med den här behörigheten kan appen tillåtas att dela eller spara kalenderuppgifter även om de är sekretessbelagda eller känsliga."</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Tillåter att appen läser alla kalenderuppgifter som sparats på surfplattan, inklusive dina vänners eller kollegors uppgifter. Med den här behörigheten kan appen tillåtas att dela eller spara kalenderuppgifter även om de är sekretessbelagda eller känsliga."</string>
<string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Tillåter att appen läser alla kalenderuppgifter som sparats på mobilen, inklusive dina vänners eller kollegors uppgifter. Med den här behörigheten kan appen tillåtas att dela eller spara kalenderuppgifter även om de är sekretessbelagda eller känsliga."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"lägga till eller ändra kalenderuppgifter och skicka e-post till gäster utan ägarens vetskap"</string>
- <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Tillåter att appen lägger till, tar bort och ändrar sådana händelser som du kan ändra på pekdatorn, inklusive dina vänners eller kollegors uppgifter. Detta kan innebära att appen tillåts skicka meddelanden som ser ut att komma från kalenderns ägare eller ändra händelser utan ägarens vetskap."</string>
+ <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Tillåter att appen lägger till, tar bort och ändrar sådana händelser som du kan ändra på surfplattan, inklusive dina vänners eller kollegors uppgifter. Detta kan innebära att appen tillåts skicka meddelanden som ser ut att komma från kalenderns ägare eller ändra händelser utan ägarens vetskap."</string>
<string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Tillåter att appen lägger till, tar bort och ändrar sådana händelser som du kan ändra på mobilen, inklusive dina vänners eller kollegors uppgifter. Detta kan innebära att appen tillåts skicka meddelanden som ser ut att komma från kalenderns ägare eller ändra händelser utan ägarens vetskap."</string>
<string name="permlab_accessMockLocation" msgid="8688334974036823330">"skenplatser för att testa"</string>
<string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Skapa skenplatser för tester eller installera en ny platsleverantör. Detta innebär att appen tillåts åsidosätta den plats och/eller status som returneras av andra platskällor, till exempel GPS eller platsleverantörer."</string>
@@ -452,11 +452,11 @@
<string name="permdesc_camera" msgid="8497216524735535009">"Tillåter att appen tar bilder och spelar in videor med kameran. Med den här behörigheten tillåts appen att använda kameran när som helst utan ditt godkännande."</string>
<string name="permlab_brick" product="tablet" msgid="2961292205764488304">"inaktivera surfplattan permanent"</string>
<string name="permlab_brick" product="default" msgid="8337817093326370537">"inaktivera telefonen permanent"</string>
- <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Tillåter att appen inaktiverar hela pekdatorn permanent. Detta är mycket farligt."</string>
+ <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Tillåter att appen inaktiverar hela surfplattan permanent. Detta är mycket farligt."</string>
<string name="permdesc_brick" product="default" msgid="5788903297627283099">"Tillåter att appen inaktiverar hela mobilen permanent. Detta är mycket farligt."</string>
<string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"tvinga omstart av surfplatta"</string>
<string name="permlab_reboot" product="default" msgid="2898560872462638242">"tvinga omstart av telefon"</string>
- <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Tillåter att appen tvingar pekdatorn att starta om."</string>
+ <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Tillåter att appen tvingar surfplattan att starta om."</string>
<string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Tillåter att appen tvingar mobilen att starta om."</string>
<string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"få åtkomst till USB-lagringen"</string>
<string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"få åtkomst till SD-kortets filsystem"</string>
@@ -503,11 +503,11 @@
<string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tillåter att appen kommer åt enhetens telefonfunktioner. Med den här behörigheten tillåts appen att identifiera mobilens telefonnummer och enhets-ID, om ett samtal pågår och vilket nummer samtalet är kopplat till."</string>
<string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"förhindra att surfplattan går in i viloläge"</string>
<string name="permlab_wakeLock" product="default" msgid="573480187941496130">"förhindra att telefonen sätts i viloläge"</string>
- <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tillåter att appen förhindrar att pekdatorn går in i viloläge."</string>
+ <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tillåter att appen förhindrar att surfplattan går in i viloläge."</string>
<string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Tillåter att appen förhindrar att mobilen går in i viloläge."</string>
<string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"slå på eller stänga av surfplattan"</string>
<string name="permlab_devicePower" product="default" msgid="4928622470980943206">"sätta på eller stänga av telefonen"</string>
- <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Tillåter att appen slår på eller stänger av pekdatorn."</string>
+ <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Tillåter att appen slår på eller stänger av surfplattan."</string>
<string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Tillåter att appen slår på eller stänger av mobilen."</string>
<string name="permlab_factoryTest" msgid="3715225492696416187">"kör i fabrikstestläge"</string>
<string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Köra som ett testläge för tillverkaren på låg nivå. På så sätt får du fullständig åtkomst till surfplattans maskinvara. Är endast tillgänglig när surfplattan körs i tillverkarens testläge."</string>
@@ -527,7 +527,7 @@
<string name="permlab_accountManagerService" msgid="4829262349691386986">"fungera som AccountManagerService"</string>
<string name="permdesc_accountManagerService" msgid="1948455552333615954">"Tillåter att appen anropar AccountAuthenticators."</string>
<string name="permlab_getAccounts" msgid="1086795467760122114">"hitta konton på enheten"</string>
- <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tillåter att appen hämtar en lista över alla kända konton på pekdatorn. Detta kan inkludera konton som har skapats av appar som du har installerat."</string>
+ <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tillåter att appen hämtar en lista över alla kända konton på surfplattan. Detta kan inkludera konton som har skapats av appar som du har installerat."</string>
<string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Tillåter att appen hämtar en lista över alla kända konton på mobilen. Detta kan inkludera konton som har skapats av appar som du har installerat."</string>
<string name="permlab_authenticateAccounts" msgid="5265908481172736933">"skapa konton och ange lösenord"</string>
<string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Tillåter att appen använder AccountManagers kontoautentiseringsfunktioner, bland annat funktioner för att skapa konton samt hämta och ange lösenord för dem."</string>
@@ -552,15 +552,15 @@
<string name="permlab_changeWifiState" msgid="6550641188749128035">"anslut och koppla från Wi-Fi"</string>
<string name="permdesc_changeWifiState" msgid="7137950297386127533">"Tillåter att appen ansluter till och kopplar från Wi-Fi-åtkomstpunkter samt gör ändringar i enhetens konfiguration för Wi-Fi-nätverk."</string>
<string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"tillåt Wi-Fi multicast-mottagning"</string>
- <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Tillåter att appen tar emot paket som skickats med multicast-adress till alla enheter i ett Wi-Fi-nätverk och inte bara till den här pekdatorn. Detta drar mer batteri än när multicastläget inte används."</string>
+ <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Tillåter att appen tar emot paket som skickats med multicast-adress till alla enheter i ett Wi-Fi-nätverk och inte bara till den här surfplattan. Detta drar mer batteri än när multicastläget inte används."</string>
<string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Tillåter att appen tar emot paket som skickats med multicast-adress till alla enheter i ett Wi-Fi-nätverk och inte bara till den här mobilen. Detta drar mer batteri än när multicastläget inte används."</string>
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"få åtkomst till Bluetooth-inställningar"</string>
- <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tillåter att appen konfigurerar den lokala Bluetooth-pekdatorn samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
+ <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tillåter att appen konfigurerar den lokala Bluetooth-surfplattan samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tillåter att appen konfigurerar den lokala Bluetooth-mobilen samt upptäcker och parkopplar den med fjärranslutna enheter."</string>
<string name="permlab_accessWimaxState" msgid="4195907010610205703">"ansluta till och koppla från WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Tillåter att appen avgör om WiMAX är aktiverat och kommer åt information om eventuella anslutna WiMAX-nätverk."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"ändra WiMAX-status"</string>
- <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tillåter att appen ansluter pekdatorn till eller kopplar från WiMAX-nätverk."</string>
+ <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tillåter att appen ansluter surfplattan till eller kopplar från WiMAX-nätverk."</string>
<string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Tillåter att appen ansluter mobilen till eller kopplar från WiMAX-nätverk."</string>
<string name="permlab_bluetooth" msgid="6127769336339276828">"koppla till Bluetooth-enheter"</string>
<string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Tillåter att appen kommer åt pekdatorns Bluetooth-konfiguration och upprättar och godkänner anslutningar till parkopplade enheter."</string>
@@ -608,14 +608,14 @@
<string name="policylab_limitPassword" msgid="4497420728857585791">"Ange lösenordsregler"</string>
<string name="policydesc_limitPassword" msgid="3252114203919510394">"Bestäm hur många och vilka tecken som är tillåtna i skärmlåsets lösenord."</string>
<string name="policylab_watchLogin" msgid="914130646942199503">"Övervaka försök att låsa upp skärmen"</string>
- <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Övervaka antalet felaktiga lösenord som angetts för skärmlåset och lås pekdatorn eller ta bort alla data från pekdatorn om för många felaktiga försök görs."</string>
+ <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Övervaka antalet felaktiga lösenord som angetts för skärmlåset och lås surfplattan eller ta bort alla data från surfplattan om för många felaktiga försök görs."</string>
<string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Övervaka antalet felaktiga lösenord som angivits för skärmlåset och lås mobilen eller ta bort alla data från mobilen om för många felaktiga försök görs."</string>
<string name="policylab_resetPassword" msgid="2620077191242688955">"Ändra skärmlåsets lösenord"</string>
<string name="policydesc_resetPassword" msgid="605963962301904458">"Ändra skärmlåsets lösenord."</string>
<string name="policylab_forceLock" msgid="2274085384704248431">"Lås skärmen"</string>
<string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollera hur och när skärmlåset aktiveras."</string>
<string name="policylab_wipeData" msgid="3910545446758639713">"Radera alla data"</string>
- <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Ta bort data från pekdatorn utan förvarning genom att återställa standardinställningarna."</string>
+ <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Ta bort data från surfplattan utan förvarning genom att återställa standardinställningarna."</string>
<string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Ta bort data från mobilen utan förvarning genom att återställa standardinställningarna."</string>
<string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Ange global proxyserver"</string>
<string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Ange vilken global proxyserver som ska användas när policyn är aktiverad. Endast den första enhetsadministratören anger den faktiska globala proxyservern."</string>
@@ -786,9 +786,9 @@
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
- <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> försök till ombeds du att låsa upp pekdatorn med din Google-inloggning."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
+ <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> försök till ombeds du att låsa upp surfplattan med din Google-inloggning."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> försök till ombeds du att låsa upp mobilen med uppgifterna som du använder när du loggar in på Google."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
- <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Du har försökt låsa upp surfplattan på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök till kommer pekdatorn att återställas till fabriksinställningarna. Du förlorar då alla användardata."</string>
+ <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Du har försökt låsa upp surfplattan på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök till kommer surfplattan att återställas till fabriksinställningarna. Du förlorar då alla användardata."</string>
<string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter <xliff:g id="NUMBER_1">%d</xliff:g> misslyckade försök till kommer mobilen att återställas till fabriksinställningarna. Du förlorar då alla användardata."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Du har försökt låsa upp surfplattan på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Surfplattan återställs nu till fabriksinställningarna."</string>
<string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Du har försökt låsa upp mobilen på fel sätt <xliff:g id="NUMBER">%d</xliff:g> gånger. Mobilen återställs nu till fabriksinställningarna."</string>
@@ -870,7 +870,7 @@
<string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"läsa dina bokmärken och din historik på webben"</string>
<string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Tillåter att appen läser historiken för besökta sidor och alla bokmärken i webbläsaren. Observera att den här behörigheten kanske inte är tillämplig för webbläsare från tredje part eller andra appar med surffunktion."</string>
<string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"skriva bokmärken och historik på webben"</string>
- <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Tillåter att appen ändrar historiken för besökta sidor i webbläsaren eller bokmärken som sparats på pekdatorn. Det kan innebära att appen kan ta bort eller ändra webbläsarinformation. Observera att den här behörigheten kanske inte är tillämplig för webbläsare från tredje part eller andra appar med surffunktion."</string>
+ <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Tillåter att appen ändrar historiken för besökta sidor i webbläsaren eller bokmärken som sparats på surfplattan. Det kan innebära att appen kan ta bort eller ändra webbläsarinformation. Observera att den här behörigheten kanske inte är tillämplig för webbläsare från tredje part eller andra appar med surffunktion."</string>
<string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Tillåter att appen ändrar historiken för besökta sidor i webbläsaren eller bokmärken som sparats på telefonen. Det kan innebära att appen kan ta bort eller ändra webbläsarinformation. Observera att den här behörigheten kanske inte är tillämplig för webbläsare från tredje part eller andra appar med surffunktion."</string>
<string name="permlab_setAlarm" msgid="1379294556362091814">"ställa in ett alarm"</string>
<string name="permdesc_setAlarm" msgid="316392039157473848">"Tillåter att appen ställer in ett alarm i en befintlig alarmapp. Vissa alarmappar har inte den här funktionen."</string>
@@ -906,7 +906,7 @@
<string name="searchview_description_submit" msgid="2688450133297983542">"Skicka fråga"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Röstsökning"</string>
<string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Aktivera Explore by Touch?"</string>
- <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med pekdatorn."</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med surfplattan."</string>
<string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vill aktivera Explore by Touch. När funktionen är aktiv kan du höra eller se beskrivningar av vad du har under fingret eller utföra gester för att göra saker med telefonen."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"för 1 månad sedan"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"För mer än en månad sedan"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 21c4a64..a574468 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -321,7 +321,7 @@
<string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"允許應用程式啟動完整備份確認使用者介面 (不建議任何應用程式使用)。"</string>
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"顯示未授權視窗"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"允許應用程式為內部系統使用者介面建立視窗 (不建議一般應用程式使用)。"</string>
- <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"描繪其他應用程式"</string>
+ <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"在其他應用程式之上顯示内容"</string>
<string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"允許應用程式在其他應用程式頂層或使用者介面的特定部分繪圖。這可能會干擾您在所有應用程式中的介面使用行為,或是使您在其他應用程式中預期看到的內容發生變化。"</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"編輯全域動畫速度"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"允許應用程式隨時變更全域的動畫速度 (更快或更慢)。"</string>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index cb8d0e5..6a93860 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -842,6 +842,12 @@
<string name="permdesc_updateBatteryStats">Allows the app to modify
collected battery statistics. Not for use by normal apps.</string>
+ <!-- [CHAR LIMIT=NONE] Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_updateAppOpsStats">modify app ops statistics</string>
+ <!-- [CHAR LIMIT=NONE] Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_updateAppOpsStats">Allows the app to modify
+ collected application operation statistics. Not for use by normal apps.</string>
+
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_backup">control system backup and restore</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 4c3644c..7fc3a34 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -172,8 +172,6 @@
<java-symbol type="id" name="text" />
<java-symbol type="id" name="time" />
<java-symbol type="id" name="time_current" />
- <java-symbol type="id" name="timeDisplayBackground" />
- <java-symbol type="id" name="timeDisplayForeground" />
<java-symbol type="id" name="titleDivider" />
<java-symbol type="id" name="titleDividerTop" />
<java-symbol type="id" name="timePicker" />
@@ -1272,27 +1270,20 @@
<java-symbol type="drawable" name="kg_widget_bg_padded" />
<java-symbol type="id" name="action_mode_bar_stub" />
<java-symbol type="id" name="alarm_status" />
- <java-symbol type="id" name="backspace" />
<java-symbol type="id" name="button0" />
<java-symbol type="id" name="button4" />
<java-symbol type="id" name="button5" />
<java-symbol type="id" name="button6" />
<java-symbol type="id" name="button7" />
- <java-symbol type="id" name="carrier" />
<java-symbol type="id" name="date" />
<java-symbol type="id" name="eight" />
- <java-symbol type="id" name="emergencyCallButton" />
<java-symbol type="id" name="face_unlock_area_view" />
<java-symbol type="id" name="face_unlock_cancel_button" />
<java-symbol type="id" name="five" />
- <java-symbol type="id" name="forgotPatternButton" />
<java-symbol type="id" name="four" />
- <java-symbol type="id" name="headerText" />
<java-symbol type="id" name="icon_menu_presenter" />
- <java-symbol type="id" name="instructions" />
<java-symbol type="id" name="keyboard" />
<java-symbol type="id" name="list_menu_presenter" />
- <java-symbol type="id" name="lockPattern" />
<java-symbol type="id" name="lock_screen" />
<java-symbol type="id" name="login" />
<java-symbol type="id" name="nine" />
@@ -1305,24 +1296,14 @@
<java-symbol type="id" name="password" />
<java-symbol type="id" name="passwordEntry" />
<java-symbol type="id" name="pinEntry" />
- <java-symbol type="id" name="pinDel" />
- <java-symbol type="id" name="pinDisplay" />
- <java-symbol type="id" name="owner_info" />
- <java-symbol type="id" name="pukDel" />
- <java-symbol type="id" name="pukDisplay" />
<java-symbol type="id" name="right_icon" />
<java-symbol type="id" name="seven" />
<java-symbol type="id" name="six" />
<java-symbol type="id" name="status" />
- <java-symbol type="id" name="status1" />
<java-symbol type="id" name="switch_ime_button" />
<java-symbol type="id" name="three" />
<java-symbol type="id" name="title_container" />
- <java-symbol type="id" name="topHeader" />
- <java-symbol type="id" name="transport" />
- <java-symbol type="id" name="transport_bg_protect" />
<java-symbol type="id" name="two" />
- <java-symbol type="id" name="unlock_widget" />
<java-symbol type="id" name="zero" />
<java-symbol type="id" name="keyguard_message_area" />
<java-symbol type="id" name="keyguard_click_area" />
@@ -1374,17 +1355,6 @@
<java-symbol type="integer" name="kg_carousel_angle" />
<java-symbol type="layout" name="global_actions_item" />
<java-symbol type="layout" name="global_actions_silent_mode" />
- <java-symbol type="layout" name="keyguard_screen_glogin_unlock" />
- <java-symbol type="layout" name="keyguard_screen_password_landscape" />
- <java-symbol type="layout" name="keyguard_screen_password_portrait" />
- <java-symbol type="layout" name="keyguard_screen_sim_pin_landscape" />
- <java-symbol type="layout" name="keyguard_screen_sim_pin_portrait" />
- <java-symbol type="layout" name="keyguard_screen_sim_puk_landscape" />
- <java-symbol type="layout" name="keyguard_screen_sim_puk_portrait" />
- <java-symbol type="layout" name="keyguard_screen_tab_unlock" />
- <java-symbol type="layout" name="keyguard_screen_tab_unlock_land" />
- <java-symbol type="layout" name="keyguard_screen_unlock_landscape" />
- <java-symbol type="layout" name="keyguard_screen_unlock_portrait" />
<java-symbol type="layout" name="keyguard_selector_view" />
<java-symbol type="layout" name="keyguard_pattern_view" />
<java-symbol type="layout" name="keyguard_password_view" />
diff --git a/core/tests/coretests/src/android/net/http/SslCertificateTest.java b/core/tests/coretests/src/android/net/http/SslCertificateTest.java
index 147816b..6a30c6c 100644
--- a/core/tests/coretests/src/android/net/http/SslCertificateTest.java
+++ b/core/tests/coretests/src/android/net/http/SslCertificateTest.java
@@ -45,11 +45,70 @@
@LargeTest
public void testSslCertificateWithEmptyIssuer() throws Exception {
- CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
- X509Certificate x509Certificate = (X509Certificate)
- certificateFactory.generateCertificate(new ByteArrayInputStream(Issue1597Certificate.getBytes()));
- assertEquals(x509Certificate.getIssuerDN().getName(), "");
+ X509Certificate x509Certificate = generateCertificate(Issue1597Certificate);
+ assertEquals("", x509Certificate.getSubjectDN().getName());
SslCertificate sslCertificate = new SslCertificate(x509Certificate);
- assertEquals(sslCertificate.getIssuedBy().getDName(), "");
+ assertEquals("", sslCertificate.getIssuedBy().getDName());
}
+
+ /**
+ * Problematic certificate from Issue 41662
+ * http://code.google.com/p/android/issues/detail?id=41662
+ */
+ private static final String Issue41662Certificate =
+ "-----BEGIN CERTIFICATE-----\n"+
+ "MIIG6jCCBdKgAwIBAgIESPx/LDANBgkqhkiG9w0BAQUFADCBrjESMBAGCgmSJomT\n"+
+ "8ixkARkWAnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZ\n"+
+ "FgJjYTEWMBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMx\n"+
+ "HDAaBgNVBAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQG\n"+
+ "A1UEAxMNUG9zdGEgQ0EgUm9vdDAeFw0wODEwMjAxNDExMzBaFw0yODEwMTQyMjAw\n"+
+ "MDBaMIGrMRIwEAYKCZImiZPyLGQBGRYCcnMxFTATBgoJkiaJk/IsZAEZFgVwb3N0\n"+
+ "YTESMBAGCgmSJomT8ixkARkWAmNhMRYwFAYDVQQDEw1Db25maWd1cmF0aW9uMREw\n"+
+ "DwYDVQQDEwhTZXJ2aWNlczEcMBoGA1UEAxMTUHVibGljIEtleSBTZXJ2aWNlczEM\n"+
+ "MAoGA1UEAxMDQUlBMRMwEQYDVQQDEwpQb3N0YSBDQSAxMIIBIjANBgkqhkiG9w0B\n"+
+ "AQEFAAOCAQ8AMIIBCgKCAQEAl5msW5MdLW/2aDlezrjU3jW58MKrcMPHs2szlGdL\n"+
+ "nsAcSyYFF1JbyA8iuqLp7mhvcTz9m4jK82XBz/1mPq8wJMU9ekGnLhgbKLGKXRBA\n"+
+ "sY9wzCvwpweQV6ui4vr2eOkS1j9Mk7ikatH8tNiIzkNrTj3npDpZv1w4G37iwtpb\n"+
+ "yjg+lkNIDY2nWV9roBsAZM8Lvbyi4vxP41YEQZ3hxaGGG0/RKHbugvGatgckxfin\n"+
+ "4gpFG2mDhS9uafGgqnLHLwpxgBbi3g6+2TsxOKatTxwxx9/4MND1GjhxKTjDNYPl\n"+
+ "5JHUvr9fcvQMxP21/jbO4EsCWG+F38R90kT37hFL3l1qiQIDAQABo4IDDzCCAwsw\n"+
+ "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgcwGA1UdIASBxDCBwTCB\n"+
+ "vgYLKwYBBAH6OAoyAQEwga4wMAYIKwYBBQUHAgEWJGh0dHA6Ly93d3cuY2EucG9z\n"+
+ "dGEucnMvZG9rdW1lbnRhY2lqYTB6BggrBgEFBQcCAjBuGmxPdm8gamUgZWxla3Ry\n"+
+ "b25za2kgc2VydGlmaWthdCBpemRhdmFja29nIChwcm9kdWtjaW9ub2cpIENBIHNl\n"+
+ "cnZlcmEgU2VydGlmaWthY2lvbm9nIHRlbGEgUG9zdGU6ICJQb3N0YSBDQSAxIi4w\n"+
+ "ggG8BgNVHR8EggGzMIIBrzCByaCBxqCBw6SBwDCBvTESMBAGCgmSJomT8ixkARkW\n"+
+ "AnJzMRUwEwYKCZImiZPyLGQBGRYFcG9zdGExEjAQBgoJkiaJk/IsZAEZFgJjYTEW\n"+
+ "MBQGA1UEAxMNQ29uZmlndXJhdGlvbjERMA8GA1UEAxMIU2VydmljZXMxHDAaBgNV\n"+
+ "BAMTE1B1YmxpYyBLZXkgU2VydmljZXMxDDAKBgNVBAMTA0FJQTEWMBQGA1UEAxMN\n"+
+ "UG9zdGEgQ0EgUm9vdDENMAsGA1UEAxMEQ1JMMTCB4KCB3aCB2oaBo2xkYXA6Ly9s\n"+
+ "ZGFwLmNhLnBvc3RhLnJzL2NuPVBvc3RhJTIwQ0ElMjBSb290LGNuPUFJQSxjbj1Q\n"+
+ "dWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxjbj1TZXJ2aWNlcyxjbj1Db25maWd1cmF0\n"+
+ "aW9uLGRjPWNhLGRjPXBvc3RhLGRjPXJzP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxp\n"+
+ "c3QlM0JiaW5hcnmGMmh0dHA6Ly9zZXJ0aWZpa2F0aS5jYS5wb3N0YS5ycy9jcmwv\n"+
+ "UG9zdGFDQVJvb3QuY3JsMB8GA1UdIwQYMBaAFPLLjeI17xBDxNp7yvrriQOhIq+4\n"+
+ "MB0GA1UdDgQWBBQuZ6cm1uhncOeq+pAsMLzXYWUfhjAZBgkqhkiG9n0HQQAEDDAK\n"+
+ "GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAjpmoaebsvfjgwgCYArou/s8k\n"+
+ "Tr50TUdcJYxAYmCFQp531E1F+qUCWM/7bZApqByR3+EUz8goI5O2Cp/6ISxTR1HC\n"+
+ "Dn71ESg7/c8Bs2Obx0LGYPnlRPvw7LH31dYXpj4EMNAamhOfBXgY2htXHCd7daIe\n"+
+ "thvNkqWGDzmcoaGw/2BMNadlYkdXxudDBaiPDFm27yR7fPRibjxwkQVknzFezX/y\n"+
+ "46j+20LoGJ/IpneT209XzytiaqtZBy3yqz2qImVDqvn5doHw63LOUqt8vfDS1sbd\n"+
+ "zi3acAmPK1nERdCMJYJEEGNiGbkbw2cghwLw/4eYGXlj1VLXD3GU42uBr8QftA==\n"+
+ "-----END CERTIFICATE-----\n";
+
+ @LargeTest
+ public void testSslCertificateWithMultipleCN() throws Exception {
+ X509Certificate x509Certificate = generateCertificate(Issue41662Certificate);
+ String dn = x509Certificate.getSubjectDN().getName();
+ assertTrue(dn, dn.contains("Posta CA 1"));
+ assertTrue(dn, dn.contains("Configuration"));
+ SslCertificate sslCertificate = new SslCertificate(x509Certificate);
+ assertEquals(dn, "Posta CA 1", sslCertificate.getIssuedTo().getCName());
+ }
+
+ private static X509Certificate generateCertificate(String pem) throws Exception {
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ return (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(pem.getBytes()));
+ }
+
}
diff --git a/docs/downloads/training/NetworkUsage.zip b/docs/downloads/training/NetworkUsage.zip
index 8c7fbef..6dbeb33 100644
--- a/docs/downloads/training/NetworkUsage.zip
+++ b/docs/downloads/training/NetworkUsage.zip
Binary files differ
diff --git a/docs/html/shareables/training/nsdchat.zip b/docs/downloads/training/NsdChat.zip
similarity index 100%
rename from docs/html/shareables/training/nsdchat.zip
rename to docs/downloads/training/NsdChat.zip
Binary files differ
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index 7282dbb..aa0e010 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -30,33 +30,33 @@
<th>API</th>
<th>Distribution</th>
</tr>
-<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td> <td>3</td><td>0.1%</td></tr>
-<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.3%</td></tr>
-<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>2.7%</td></tr>
-<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>10.3%</td></tr>
+<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td> <td>4</td><td>0.2%</td></tr>
+<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td> <td>7</td><td>2.4%</td></tr>
+<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td> <td>8</td><td>9.0%</td></tr>
<tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
</td><td rowspan="2">Gingerbread</td> <td>9</td><td>0.2%</td></tr>
<tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7
- </a></td><!-- Gingerbread --> <td>10</td><td>50.6%</td></tr>
+ </a></td><!-- Gingerbread --> <td>10</td><td>47.4%</td></tr>
<tr><td><a href="/about/versions/android-3.1.html">3.1</a></td>
<td rowspan="2">Honeycomb</td> <td>12</td><td>0.4%</td></tr>
-<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.2%</td></tr>
+<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td> <!-- Honeycomb --><td>13</td><td>1.1%</td></tr>
<tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a></td>
- <td>Ice Cream Sandwich</td><td>15</td><td>27.5%</td></tr>
+ <td>Ice Cream Sandwich</td><td>15</td><td>29.1%</td></tr>
<tr><td><a href="/about/versions/android-4.1.html">4.1</a></td>
- <td rowspan="2">Jelly Bean</td><td>16</td><td>5.9%</td></tr>
-<tr><td><a href="/about/versions/android-4.2.html">4.2</a></td><!--Jelly Bean--> <td>17</td><td>0.8%</td></tr>
+ <td rowspan="2">Jelly Bean</td><td>16</td><td>9.0%</td></tr>
+<tr><td><a href="/about/versions/android-4.2.html">4.2</a></td><!--Jelly Bean--> <td>17</td><td>1.2%</td></tr>
</table>
</div>
<div class="col-8" style="margin-right:0">
<img alt=""
-src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chf=bg,s,00000000&chd=t:3.1,10.3,50.8,1.6,27.5,6.7&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c" />
+src="http://chart.apis.google.com/chart?&cht=p&chs=460x245&chf=bg,s,00000000&chd=t:2.6,9.0,47.6,1.5,29.1,10.2&chl=Eclair%20%26%20older|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=c4df9b,6fad0c"
+/>
</div><!-- end dashboard-panel -->
-<p style="clear:both"><em>Data collected during a 14-day period ending on December 3, 2012</em></p>
+<p style="clear:both"><em>Data collected during a 14-day period ending on January 3, 2013</em></p>
<!--
<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
-->
@@ -81,9 +81,9 @@
Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
<img alt="" height="250" width="660"
-src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C06/01%7C06/15%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.1,99.2,99.2,99.2,99.2,99.2,99.3,99.4,99.5,99.5,99.5,99.6,100.0|93.9,94.2,94.5,94.7,95.0,95.2,95.6,95.8,96.1,96.3,96.4,96.7,96.9|74.8,75.9,77.1,78.3,79.5,80.4,81.4,82.3,83.2,83.8,84.7,85.6,86.4|9.8,11.3,13.0,15.7,18.9,21.2,23.7,25.5,27.4,28.7,31.1,33.0,35.4|7.1,8.7,10.6,13.3,16.6,19.0,21.5,23.5,25.5,26.8,29.4,31.4,33.8|0.0,0.0,0.0,0.0,0.8,0.9,1.1,1.4,1.8,2.1,3.2,4.8,6.5&chm=b,c3df9b,0,1,0|tFroyo,689326,1,0,15,,t::-5|b,b4db77,1,2,0|tGingerbread,547a19,2,0,15,,t::-5|b,a5db51,2,3,0|b,96dd28,3,4,0|tIce%20Cream%20Sandwich,293f07,4,2,15,,t::-5|b,83c916,4,5,0|B,6fad0c,5,6,0&chg=7,25&chdl=Eclair|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=add274,9dd14f,8ece2a,7ab61c,659b11,507d08"
+src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chf=bg,s,00000000&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C07/01%7C07/15%7C08/01%7C08/15%7C09/01%7C09/15%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C1%3A%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2013%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:99.2,99.2,99.2,99.2,99.3,99.4,99.5,99.5,99.5,99.6,100.0,100.0,100.0|94.5,94.7,95.0,95.2,95.6,95.8,96.1,96.3,96.4,96.7,96.9,97.2,97.4|77.1,78.3,79.5,80.4,81.4,82.3,83.2,83.8,84.7,85.6,86.4,87.0,88.2|13.0,15.7,18.9,21.2,23.7,25.5,27.4,28.7,31.1,33.0,35.4,36.8,40.3|10.6,13.3,16.6,19.0,21.5,23.5,25.5,26.8,29.4,31.4,33.8,35.2,38.8|0.0,0.0,0.8,0.9,1.1,1.4,1.8,2.1,3.2,4.8,6.5,7.5,9.9&chm=b,c3df9b,0,1,0|tFroyo,689326,1,0,15,,t::-5|b,b4db77,1,2,0|tGingerbread,547a19,2,0,15,,t::-5|b,a5db51,2,3,0|b,96dd28,3,4,0|tIce%20Cream%20Sandwich,293f07,4,0,15,,t::-5|b,83c916,4,5,0|B,6fad0c,5,6,0&chg=7,25&chdl=Eclair|Froyo|Gingerbread|Honeycomb|Ice%20Cream%20Sandwich|Jelly%20Bean&chco=add274,9dd14f,8ece2a,7ab61c,659b11,507d08"
/>
-<p><em>Last historical dataset collected during a 14-day period ending on December 1, 2012</em></p>
+<p><em>Last historical dataset collected during a 14-day period ending on January 1, 2013</em></p>
diff --git a/docs/html/about/versions/android-4.2.jd b/docs/html/about/versions/android-4.2.jd
index 37434fb..13ee872 100644
--- a/docs/html/about/versions/android-4.2.jd
+++ b/docs/html/about/versions/android-4.2.jd
@@ -240,7 +240,7 @@
secondary screens, you can apply
a different theme by specifying the {@link
android.R.attr#presentationTheme android:presentationTheme} attribute in the <a
-href=”{@docRoot}guide/topics/resources/style-resource.html”>{@code <style>}</a> that you’ve
+href="{@docRoot}guide/topics/resources/style-resource.html">{@code <style>}</a> that you’ve
applied to your application or activity.</p>
<p>Keep in mind that screens connected to the user’s device often have a larger screen size and
diff --git a/docs/html/design/patterns/notifications.jd b/docs/html/design/patterns/notifications.jd
index 1a15a64..0665774 100644
--- a/docs/html/design/patterns/notifications.jd
+++ b/docs/html/design/patterns/notifications.jd
@@ -153,8 +153,13 @@
<p>To create an app that feels streamlined, pleasant, and respectful, it is important to design your notifications carefully. Notifications embody your app's voice, and contribute to your app's personality. Unwanted or unimportant notifications can annoy the user, so use them judiciously.</p>
<h4>When to display a notification</h4>
-<p>To create an application that people love, it's important to recognize that the user's attention and focus is a resource that must be protected. While Android's notification system has been designed to minimize the impact of notifications on the users attention, it is nonetheless still important to be aware of the fact that notifications are potentially interrupting the users task flow. As you plan your notifications, ask yourself if they are important enough to warrant an interruption. If you are unsure, allow the user to opt into a notification using your apps notification settings or adjust the notifications priority flag.</p>
-<p>Time sensitive events are great opportunities for valuable notifications with high priority, especially if these synchronous events involve other people. For instance, an incoming chat is a real time and synchronous form of communication: there is another user actively waiting on you to respond. Calendar events are another good example of when to use a notification and grab the user's attention, because the event is imminent, and calendar events often involve other people.</p>
+<p>To create an application that people love, it's important to recognize that the user's attention and
+focus is a resource that must be protected. While Android's notification system has been designed
+to minimize the impact of notifications on the users attention, it is nonetheless still important
+to be aware of the fact that notifications are potentially interrupting the users task flow. As you
+plan your notifications, ask yourself if they are important enough to warrant an interruption. If
+you are unsure, allow the user to opt into a notification using your apps notification settings or
+adjust the notifications priority flag.</p>
<p>While well behaved apps generally only speak when spoken to, there are some limited cases where an
app actually should interrupt the user with an unprompted notification.</p>
<p>Notifications should be used primarily for <strong>time sensitive events</strong>, and especially if these
diff --git a/docs/html/google/google_toc.cs b/docs/html/google/google_toc.cs
index 8611534..8b09fe6 100644
--- a/docs/html/google/google_toc.cs
+++ b/docs/html/google/google_toc.cs
@@ -1,9 +1,15 @@
-<?cs # Table of contents for Dev Guide.
-
- For each document available in translation, add an localized title to this TOC.
- Do not add localized title for docs not available in translation.
- Below are template spans for adding localized doc titles. Please ensure that
- localized titles are added in the language order specified below.
+<?cs #########################################################
+ ######## ###############
+ ######## ATTENTION ###############
+ ######## ###############
+ #########################################################
+
+ IF YOU MAKE CHANGES TO THIS FILE, YOU MUST GENERATE THE
+ GMS REFERENCE DOCS, BECAUSE THEY ARE NOT INCLUDED IN THE
+ DOCS BUILD RULE.
+
+ #########################################################
+ #########################################################
?>
<ul id="nav">
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index 554866d..405c58a 100644
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -128,7 +128,9 @@
}
</pre>
-<p>For a complete implementation of a service connection that binds to the {@code IInAppBillingService}, see the <a href="{@docRoot}/training/in-app-billing/preparing-iab-app.html#Connect">Selling In-app Products</a> training class.</p>
+<p>For a complete implementation of a service connection that binds to the {@code IInAppBillingService},
+see the <a href="{@docRoot}training/in-app-billing/preparing-iab-app.html">Selling In-app
+Products</a> training class and associated sample.</p>
<h2 id="billing-requests">Making In-app Billing Requests</h2>
<p>Once your application is connected to Google Play, you can initiate purchase requests for in-app products. Google Play provides a checkout interface for users to enter their payment method, so your application does not need to handle payment transactions directly. When an item is purchased, Google Play recognizes that the user has ownership of that item and prevents the user from purchasing another item with the same product ID until it is consumed. You can control how the item is consumed in your application, and notify Google Play to make the item available for purchase again. You can also query Google Play to quickly retrieve the list of purchases that were made by the user. This is useful, for example, when you want to restore the user's purchases when your user launches your app.
diff --git a/docs/html/google/play/licensing/adding-licensing.jd b/docs/html/google/play/licensing/adding-licensing.jd
index 15d1e92..8ecbe9e 100644
--- a/docs/html/google/play/licensing/adding-licensing.jd
+++ b/docs/html/google/play/licensing/adding-licensing.jd
@@ -93,7 +93,7 @@
element as a child of <code><manifest></code>, as follows: </p>
<p style="margin-left:2em;"><code><uses-permission
-android:name="com.android.vending.CHECK_LICENSE"></code></p>
+android:name="com.android.vending.CHECK_LICENSE" /></code></p>
<p>For example, here's how the LVL sample application declares the permission:
</p>
diff --git a/docs/html/google/play/licensing/setting-up.jd b/docs/html/google/play/licensing/setting-up.jd
index 77e9d09..1d4e775 100644
--- a/docs/html/google/play/licensing/setting-up.jd
+++ b/docs/html/google/play/licensing/setting-up.jd
@@ -290,7 +290,7 @@
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
+<p>Moving the library sources is important 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
diff --git a/docs/html/guide/components/aidl.jd b/docs/html/guide/components/aidl.jd
index 805b7ec..0be6e6f 100644
--- a/docs/html/guide/components/aidl.jd
+++ b/docs/html/guide/components/aidl.jd
@@ -208,7 +208,7 @@
defines a few helper methods, most notably {@code asInterface()}, which takes an {@link
android.os.IBinder} (usually the one passed to a client's {@link
android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method) and
-returns an instance of the stub interface. See the section <a href="#calling">Calling an IPC
+returns an instance of the stub interface. See the section <a href="#Calling">Calling an IPC
Method</a> for more details on how to make this cast.</p>
<p>To implement the interface generated from the {@code .aidl}, extend the generated {@link
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index c25dff8..3d6f18b 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -708,9 +708,9 @@
<td>Television</td>
<td><code>android.hardware.type.television</code></td>
<td>The application is designed for a television user experience.</td>
- <td>>This feature defines "television" to be a typical living room television experience:
+ <td>This feature defines "television" to be a typical living room television experience:
displayed on a big screen, where the user is sitting far away and the dominant form of
- input is be something like a d-pad, and generally not through touch or a
+ input is something like a d-pad, and generally not through touch or a
mouse/pointer-device.</td>
</tr>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 8026b7d..e70987b 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -700,7 +700,7 @@
element for the {@link android.app.Activity}
<dl>
<dt>
-<code><a href="guide/topics/manifest/activity-element.html#nm">android:name</a>="<i>activityclass</i>"</code>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">android:name</a>="<i>activityclass</i>"</code>
</dt>
<dd>
The activity's fully-qualified class name.
@@ -921,7 +921,7 @@
</p>
<pre>
// Sets an activity indicator for an operation of indeterminate length
-mBuilder.setProgress(0, 0, false);
+mBuilder.setProgress(0, 0, true);
// Issues the notification
mNotifyManager.notify(0, mBuilder.build());
</pre>
diff --git a/docs/html/guide/webapps/webview.jd b/docs/html/guide/webapps/webview.jd
index ce7fe27..f8b2a1d 100644
--- a/docs/html/guide/webapps/webview.jd
+++ b/docs/html/guide/webapps/webview.jd
@@ -314,7 +314,7 @@
@Override
public boolean {@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown}(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
- if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.{@link android.webkit.WebView#canGoBack() canGoBack}() {
+ if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.{@link android.webkit.WebView#canGoBack() canGoBack}()) {
myWebView.{@link android.webkit.WebView#goBack() goBack}();
return true;
}
diff --git a/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html b/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
index 1be991f..6478451 100644
--- a/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
+++ b/docs/html/reference/com/google/android/gcm/GCMBaseIntentService.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -5545,11 +5570,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html b/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
index 59a027a..880f628 100644
--- a/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
+++ b/docs/html/reference/com/google/android/gcm/GCMBroadcastReceiver.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1479,11 +1504,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/GCMConstants.html b/docs/html/reference/com/google/android/gcm/GCMConstants.html
index d6e5c26..8cee735 100644
--- a/docs/html/reference/com/google/android/gcm/GCMConstants.html
+++ b/docs/html/reference/com/google/android/gcm/GCMConstants.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2004,11 +2029,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/GCMRegistrar.html b/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
index e2a166a..a0a5930 100644
--- a/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
+++ b/docs/html/reference/com/google/android/gcm/GCMRegistrar.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1683,11 +1708,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/package-summary.html b/docs/html/reference/com/google/android/gcm/package-summary.html
index fc8f89e..45c8c2e 100644
--- a/docs/html/reference/com/google/android/gcm/package-summary.html
+++ b/docs/html/reference/com/google/android/gcm/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -598,11 +623,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/Constants.html b/docs/html/reference/com/google/android/gcm/server/Constants.html
index 43d3c46..b8bdcf4 100644
--- a/docs/html/reference/com/google/android/gcm/server/Constants.html
+++ b/docs/html/reference/com/google/android/gcm/server/Constants.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2289,11 +2314,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html b/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
index b744a0b..f6621b5 100644
--- a/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
+++ b/docs/html/reference/com/google/android/gcm/server/InvalidRequestException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1449,11 +1474,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/Message.Builder.html b/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
index 52f54cc..f7e68b2 100644
--- a/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
+++ b/docs/html/reference/com/google/android/gcm/server/Message.Builder.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1261,11 +1286,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/Message.html b/docs/html/reference/com/google/android/gcm/server/Message.html
index 95a54f6..c7a2d4a 100644
--- a/docs/html/reference/com/google/android/gcm/server/Message.html
+++ b/docs/html/reference/com/google/android/gcm/server/Message.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1265,11 +1290,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/MulticastResult.html b/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
index d02e940..3174036 100644
--- a/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
+++ b/docs/html/reference/com/google/android/gcm/server/MulticastResult.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1359,11 +1384,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/Result.html b/docs/html/reference/com/google/android/gcm/server/Result.html
index 27f9c2f..626bcb4 100644
--- a/docs/html/reference/com/google/android/gcm/server/Result.html
+++ b/docs/html/reference/com/google/android/gcm/server/Result.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1188,11 +1213,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/Sender.html b/docs/html/reference/com/google/android/gcm/server/Sender.html
index 1024c69..e49637e 100644
--- a/docs/html/reference/com/google/android/gcm/server/Sender.html
+++ b/docs/html/reference/com/google/android/gcm/server/Sender.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2075,11 +2100,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gcm/server/package-summary.html b/docs/html/reference/com/google/android/gcm/server/package-summary.html
index a1405cf..c463e35 100644
--- a/docs/html/reference/com/google/android/gcm/server/package-summary.html
+++ b/docs/html/reference/com/google/android/gcm/server/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -615,11 +640,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/R.attr.html b/docs/html/reference/com/google/android/gms/R.attr.html
index 771b1ce..9c16b34 100644
--- a/docs/html/reference/com/google/android/gms/R.attr.html
+++ b/docs/html/reference/com/google/android/gms/R.attr.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1661,11 +1686,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/R.html b/docs/html/reference/com/google/android/gms/R.html
index b7082ed..93fc057 100644
--- a/docs/html/reference/com/google/android/gms/R.html
+++ b/docs/html/reference/com/google/android/gms/R.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1066,11 +1091,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/R.id.html b/docs/html/reference/com/google/android/gms/R.id.html
index 9dff483..49d4488 100644
--- a/docs/html/reference/com/google/android/gms/R.id.html
+++ b/docs/html/reference/com/google/android/gms/R.id.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1182,11 +1207,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/R.string.html b/docs/html/reference/com/google/android/gms/R.string.html
index ec4d1a7..cfc7039 100644
--- a/docs/html/reference/com/google/android/gms/R.string.html
+++ b/docs/html/reference/com/google/android/gms/R.string.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1494,11 +1519,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/R.styleable.html b/docs/html/reference/com/google/android/gms/R.styleable.html
index fa98dbc..8e9d328 100644
--- a/docs/html/reference/com/google/android/gms/R.styleable.html
+++ b/docs/html/reference/com/google/android/gms/R.styleable.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1884,11 +1909,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html b/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
index 384b41d..eab5502 100644
--- a/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
+++ b/docs/html/reference/com/google/android/gms/auth/GoogleAuthException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1339,11 +1364,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html b/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
index 1a481ca..c7bd650 100644
--- a/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
+++ b/docs/html/reference/com/google/android/gms/auth/GoogleAuthUtil.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1948,11 +1973,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html b/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
index e57826a..34a0cc5 100644
--- a/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
+++ b/docs/html/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1364,11 +1389,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html b/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
index 13c6a32..c7fa1fa 100644
--- a/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
+++ b/docs/html/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1392,11 +1417,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html b/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
index fad489a..7d31a14 100644
--- a/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
+++ b/docs/html/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1291,11 +1316,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/auth/package-summary.html b/docs/html/reference/com/google/android/gms/auth/package-summary.html
index 513f0c2..d012bf3 100644
--- a/docs/html/reference/com/google/android/gms/auth/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/auth/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -618,11 +643,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/AccountPicker.html b/docs/html/reference/com/google/android/gms/common/AccountPicker.html
index dba73d8..0d275a3 100644
--- a/docs/html/reference/com/google/android/gms/common/AccountPicker.html
+++ b/docs/html/reference/com/google/android/gms/common/AccountPicker.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1089,11 +1114,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/ConnectionResult.html b/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
index 319fe9c..cba7af1 100644
--- a/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
+++ b/docs/html/reference/com/google/android/gms/common/ConnectionResult.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1880,11 +1905,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
index 330d74f..cc502c1 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -824,11 +849,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
index c6a4f6a..b4add9a 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -778,11 +803,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
index 5b8301a..fef18ea 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesClient.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1363,11 +1388,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
index 4fe62ad..d20d3f7b 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1325,11 +1350,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
index faac780..81c57c8 100644
--- a/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
+++ b/docs/html/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1181,8 +1206,8 @@
<span class="jd-tagtitle">Constant Value: </span>
<span>
- 2011000
- (0x001eaf78)
+ 2012000
+ (0x001eb360)
</span>
</div>
@@ -1616,11 +1641,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/Scopes.html b/docs/html/reference/com/google/android/gms/common/Scopes.html
index 80cc583..cb0b15b 100644
--- a/docs/html/reference/com/google/android/gms/common/Scopes.html
+++ b/docs/html/reference/com/google/android/gms/common/Scopes.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1011,11 +1036,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/common/package-summary.html b/docs/html/reference/com/google/android/gms/common/package-summary.html
index 4f5b050..2056542 100644
--- a/docs/html/reference/com/google/android/gms/common/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/common/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -636,11 +661,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html b/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
index 337fe4f..13a71e5 100644
--- a/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
+++ b/docs/html/reference/com/google/android/gms/maps/CameraUpdate.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -956,11 +981,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html b/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
index d958208..512151f 100644
--- a/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
+++ b/docs/html/reference/com/google/android/gms/maps/CameraUpdateFactory.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1726,11 +1751,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
index 17956d7..f1c12bf 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -808,11 +833,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
index 8e4713c..de772f1 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -857,11 +882,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
index cab50ae..0cc7fd3 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -773,11 +798,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
index 91a9ce3..d2b61b4 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -769,11 +794,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
index 01dd51c..cd52fee 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -774,11 +799,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
index df85d1e..12bb496 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -774,11 +799,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
index ea6bb6a..560b799 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -776,11 +801,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
index 6de516c..8e97fc9 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -887,11 +912,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMap.html b/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
index ff847c5..1e07fe0 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMap.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -3267,11 +3292,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html b/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
index af47273..a936568 100644
--- a/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/GoogleMapOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2412,11 +2437,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html b/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
index 36947cc..6251f9b 100644
--- a/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
+++ b/docs/html/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -769,11 +794,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/LocationSource.html b/docs/html/reference/com/google/android/gms/maps/LocationSource.html
index bc4b8ec..566ae3e 100644
--- a/docs/html/reference/com/google/android/gms/maps/LocationSource.html
+++ b/docs/html/reference/com/google/android/gms/maps/LocationSource.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -874,11 +899,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/MapFragment.html b/docs/html/reference/com/google/android/gms/maps/MapFragment.html
index b8c25d6..4e37711 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapFragment.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapFragment.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -3117,11 +3142,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/MapView.html b/docs/html/reference/com/google/android/gms/maps/MapView.html
index 52f97aa..051b75c 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapView.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapView.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -12478,11 +12503,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html b/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
index 56c36d4..d046585 100644
--- a/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
+++ b/docs/html/reference/com/google/android/gms/maps/MapsInitializer.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1039,11 +1064,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/Projection.html b/docs/html/reference/com/google/android/gms/maps/Projection.html
index 214a0c0..98239e8 100644
--- a/docs/html/reference/com/google/android/gms/maps/Projection.html
+++ b/docs/html/reference/com/google/android/gms/maps/Projection.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1148,11 +1173,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html b/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
index d18f9dd..7d91d15 100644
--- a/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
+++ b/docs/html/reference/com/google/android/gms/maps/SupportMapFragment.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2974,11 +2999,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/UiSettings.html b/docs/html/reference/com/google/android/gms/maps/UiSettings.html
index 5b8f856..9cafb04 100644
--- a/docs/html/reference/com/google/android/gms/maps/UiSettings.html
+++ b/docs/html/reference/com/google/android/gms/maps/UiSettings.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1836,11 +1861,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
index d57a280..f1da03c 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -959,11 +984,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
index c683389..5012b90 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1774,11 +1799,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
index ca911b3..f01ff0c 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1335,11 +1360,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
index 6dd08be..3f592b2 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/CameraPosition.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1935,11 +1960,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
index f8412c6..2987830 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlay.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2107,11 +2132,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
index 71bdda0..6e5f214 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2632,11 +2657,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLng.html b/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
index a34ea20..a48ca54 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLng.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1600,11 +1625,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
index de5733c..37d8146 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1152,11 +1177,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
index f76571c..563cc47 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/LatLngBounds.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1810,11 +1835,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Marker.html b/docs/html/reference/com/google/android/gms/maps/model/Marker.html
index f8a0155..5893473 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Marker.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Marker.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1848,11 +1873,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html b/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
index 939e425..08ef863 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/MarkerOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2194,11 +2219,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Polygon.html b/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
index f40bfb1..046d280 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Polygon.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2073,11 +2098,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html b/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
index b3075b8..c688e4e 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/PolygonOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2309,11 +2334,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Polyline.html b/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
index 060f91f..4ffd067 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Polyline.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1921,11 +1946,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html b/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
index 6d42986..3288493 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/PolylineOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2093,11 +2118,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html b/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
index 397a7ad..8d5c4a2 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1290,11 +1315,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/Tile.html b/docs/html/reference/com/google/android/gms/maps/model/Tile.html
index 8c775c2..fd59da5 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/Tile.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/Tile.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1501,11 +1526,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html b/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
index 1b8bafd..c216bf8 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileOverlay.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1480,11 +1505,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html b/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
index 86a1417..80deef6f 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1688,11 +1713,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html b/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
index 3ad75ba..a33a967 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/TileProvider.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -901,11 +926,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html b/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
index c586f1e..4b82dfa 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/UrlTileProvider.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1306,11 +1331,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html b/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
index 04bd89a..8e5f192 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/VisibleRegion.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1755,11 +1780,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/model/package-summary.html b/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
index 30a3f37..cdee9af 100644
--- a/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/maps/model/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -688,11 +713,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/maps/package-summary.html b/docs/html/reference/com/google/android/gms/maps/package-summary.html
index b762b0c..903b8fa 100644
--- a/docs/html/reference/com/google/android/gms/maps/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/maps/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -675,11 +700,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/package-summary.html b/docs/html/reference/com/google/android/gms/package-summary.html
index 537c749..ec06c8b 100644
--- a/docs/html/reference/com/google/android/gms/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -600,11 +625,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
index 51f8c46..edd0a19 100644
--- a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
+++ b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -775,11 +800,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
index 0c71fdb..b4b14f7 100644
--- a/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
+++ b/docs/html/reference/com/google/android/gms/panorama/PanoramaClient.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1960,11 +1985,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/panorama/package-summary.html b/docs/html/reference/com/google/android/gms/panorama/package-summary.html
index 5cc95b1..aa40441 100644
--- a/docs/html/reference/com/google/android/gms/panorama/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/panorama/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -595,11 +620,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html b/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
index 5f8dbf3..635b3fa 100644
--- a/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
+++ b/docs/html/reference/com/google/android/gms/plus/GooglePlusUtil.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1346,11 +1371,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusClient.html b/docs/html/reference/com/google/android/gms/plus/PlusClient.html
index 05a30ec..867ca65 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusClient.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusClient.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -2141,11 +2166,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
index d10a252..e45596e 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -772,11 +797,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
index dda095c..b0a9474 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusOneButton.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -12354,11 +12379,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html b/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
index d2ee6bc..21c5804 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusShare.Builder.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1550,11 +1575,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusShare.html b/docs/html/reference/com/google/android/gms/plus/PlusShare.html
index 4ea956d..a220418 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusShare.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusShare.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -1347,11 +1372,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html b/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
index 67fdf37..60f60a2 100644
--- a/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
+++ b/docs/html/reference/com/google/android/gms/plus/PlusSignInButton.html
@@ -360,7 +360,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -368,7 +368,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -390,32 +390,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -431,11 +446,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -456,38 +469,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -9803,11 +9828,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/com/google/android/gms/plus/package-summary.html b/docs/html/reference/com/google/android/gms/plus/package-summary.html
index 8e0da0e..8deab06 100644
--- a/docs/html/reference/com/google/android/gms/plus/package-summary.html
+++ b/docs/html/reference/com/google/android/gms/plus/package-summary.html
@@ -361,7 +361,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -369,7 +369,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -391,32 +391,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -432,11 +447,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -457,38 +470,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -622,11 +647,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/gcm-packages.html b/docs/html/reference/gcm-packages.html
index 653f850..28fd130 100644
--- a/docs/html/reference/gcm-packages.html
+++ b/docs/html/reference/gcm-packages.html
@@ -359,7 +359,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -389,32 +389,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -430,11 +445,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -455,38 +468,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -562,11 +587,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:15
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/reference/gms-packages.html b/docs/html/reference/gms-packages.html
index 228e841..be865d2 100644
--- a/docs/html/reference/gms-packages.html
+++ b/docs/html/reference/gms-packages.html
@@ -359,7 +359,7 @@
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
- <span class="en">Google Play services</span></a>
+ <span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
@@ -367,7 +367,7 @@
</li>
<li><a href="/google/play-services/auth.html">
- <span class="en">Authentication</span></a>
+ <span class="en">Authorization</span></a>
</li>
<li><a href="/google/play-services/plus.html">
@@ -389,32 +389,47 @@
</ul>
</li>
+
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
- <li><a href="/google/play/billing/billing_overview.html">
- <span class="en">In-app Billing Overview</span></a>
- </li>
- <li><a href="/google/play/billing/billing_integrate.html">
- <span class="en">Implementing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_subscriptions.html">
- <span class="en">Subscriptions</span></a>
- </li>
- <li><a href="/google/play/billing/billing_best_practices.html">
+ <li><a href="/google/play/billing/billing_overview.html">
+ <span class="en">Overview</span></a>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html">
+ <span class="en">Version 3 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
+ <span class="en">Version 2 API</span></a></div>
+ <ul>
+ <li><a href="/google/play/billing/v2/billing_integrate.html">
+ <span class="en">Implementing the API</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_subscriptions.html">
+ <span class="en">Subscriptions</span></a></li>
+ <li><a href="/google/play/billing/v2/billing_reference.html">
+ <span class="en">Reference</span></a></li>
+ </ul>
+ </li>
+ <li><a href="/google/play/billing/billing_best_practices.html">
<span class="en">Security and Design</span></a>
- </li>
- <li><a href="/google/play/billing/billing_testing.html">
+ </li>
+ <li><a href="/google/play/billing/billing_testing.html">
<span class="en">Testing In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_admin.html">
+ </li>
+ <li><a href="/google/play/billing/billing_admin.html">
<span class="en">Administering In-app Billing</span></a>
- </li>
- <li><a href="/google/play/billing/billing_reference.html">
- <span class="en">Reference</span></a>
- </li>
+ </li>
+ <li><a href="/google/play/billing/versions.html">
+ <span class="en">Version Notes</span></a>
+ </li>
</ul>
</li>
@@ -430,11 +445,9 @@
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
-
<li><a href="/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="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
@@ -455,38 +468,50 @@
</ul>
</li>
</ul>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/gcm/index.html">
+ <span class="en">Google Cloud Messaging</span></a>
+ </div>
+ <ul>
+ <li><a href="/google/gcm/gs.html">
+ <span class="en">Getting Started</span></a>
+ </li>
+ <li><a href="/google/gcm/gcm.html">
+ <span class="en">Architectural Overview</span></a>
+ </li>
+ <li><a href="/google/gcm/demo.html">
+ <span class="en">Demo App Tutorial</span></a>
+ </li>
+ <li><a href="/google/gcm/adv.html">
+ <span class="en">Advanced Topics</span></a>
+ </li>
+ <li><a href="/google/gcm/c2dm.html">
+ <span class="en">Migration</span></a>
+ </li>
+ <li id="gcm-tree-list" class="nav-section">
+ <div class="nav-section-header">
+ <a href="/reference/gcm-packages.html">
+ <span class="en">Reference</span>
+ </a>
+ <div>
+ </li>
+ </ul>
+ </li>
- <li class="nav-section">
- <div class="nav-section-header"><a href="/google/gcm/index.html">
- <span class="en">Google Cloud Messaging</span></a>
- </div>
- <ul>
- <li><a href="/google/gcm/gs.html">
- <span class="en">Getting Started</span></a>
- </li>
- <li><a href="/google/gcm/gcm.html">
- <span class="en">Architectural Overview</span></a>
- </li>
- <li><a href="/google/gcm/demo.html">
- <span class="en">Demo App Tutorial</span></a>
- </li>
- <li><a href="/google/gcm/adv.html">
- <span class="en">Advanced Topics</span></a>
- </li>
- <li><a href="/google/gcm/c2dm.html">
- <span class="en">Migration</span></a>
- </li>
- <li id="gcm-tree-list" class="nav-section">
- <div class="nav-section-header">
- <a href="/reference/gcm-packages.html">
- <span class="en">Reference</span>
- </a>
- <div>
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="/google/backup/index.html">
+ Android Backup Service</a>
+ </div>
+ <ul>
+ <li><a href="/google/backup/signup.html">
+ Register</a>
</li>
+ </ul>
+ </li>
- </ul>
- </li>
</ul>
<script type="text/javascript">
@@ -530,9 +555,9 @@
<div id="jd-content">
<div class="jd-descr">
- <p>Contains the classes for accessing the services provided in the Google Play services platform.
- See the <a href="/google/play-services/setup.html">Setup guide</a> on how to configure the
- SDK that contains these classes.</p>
+<p>Contains the classes for accessing the services provided in the Google Play services platform.
+See the <a href="/google/play-services/setup.html">Setup guide</a> on how to configure the
+SDK that contains these classes.</p>
</div>
@@ -599,11 +624,7 @@
For details and restrictions, see the <a href="/license.html">
Content License</a>.
</div>
- <div id="build_info">
-
- Android r — 03 Dec 2012 12:16
-
- </div>
+
<div id="footerlinks">
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index a3e17a6..3248b7d 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -1,3 +1,4 @@
+http://developer.android.com/
http://developer.android.com/index.html
http://developer.android.com/design/index.html
http://developer.android.com/develop/index.html
@@ -7,23 +8,22 @@
http://developer.android.com/design/patterns/index.html
http://developer.android.com/design/building-blocks/index.html
http://developer.android.com/design/downloads/index.html
+http://developer.android.com/design/videos/index.html
http://developer.android.com/training/index.html
http://developer.android.com/guide/components/index.html
http://developer.android.com/reference/packages.html
http://developer.android.com/tools/index.html
http://developer.android.com/sdk/index.html
+http://developer.android.com/google/index.html
http://developer.android.com/distribute/googleplay/publish/index.html
http://developer.android.com/distribute/googleplay/promote/index.html
+http://developer.android.com/distribute/googleplay/quality/index.html
+http://developer.android.com/distribute/googleplay/spotlight/index.html
http://developer.android.com/distribute/open.html
http://developer.android.com/about/versions/jelly-bean.html
http://developer.android.com/support.html
http://developer.android.com/legal.html
http://developer.android.com/license.html
-http://developer.android.com/reference/android/support/v4/app/DialogFragment.html
-http://developer.android.com/guide/google/play/billing/index.html
-http://developer.android.com/guide/topics/providers/contacts-provider.html
-http://developer.android.com/training/efficient-downloads/index.html
-http://developer.android.com/training/backward-compatible-ui/index.html
http://developer.android.com/design/get-started/creative-vision.html
http://developer.android.com/design/get-started/principles.html
http://developer.android.com/design/get-started/ui-overview.html
@@ -35,7 +35,7 @@
http://developer.android.com/design/style/color.html
http://developer.android.com/design/style/iconography.html
http://developer.android.com/design/style/writing.html
-http://developer.android.com/design/patterns/new-4-0.html
+http://developer.android.com/design/patterns/new.html
http://developer.android.com/design/patterns/gestures.html
http://developer.android.com/design/patterns/app-structure.html
http://developer.android.com/design/patterns/navigation.html
@@ -43,9 +43,13 @@
http://developer.android.com/design/patterns/multi-pane-layouts.html
http://developer.android.com/design/patterns/swipe-views.html
http://developer.android.com/design/patterns/selection.html
+http://developer.android.com/design/patterns/confirming-acknowledging.html
http://developer.android.com/design/patterns/notifications.html
+http://developer.android.com/design/patterns/widgets.html
http://developer.android.com/design/patterns/settings.html
+http://developer.android.com/design/patterns/help.html
http://developer.android.com/design/patterns/compatibility.html
+http://developer.android.com/design/patterns/accessibility.html
http://developer.android.com/design/patterns/pure-android.html
http://developer.android.com/design/building-blocks/tabs.html
http://developer.android.com/design/building-blocks/lists.html
@@ -59,18 +63,128 @@
http://developer.android.com/design/building-blocks/switches.html
http://developer.android.com/design/building-blocks/dialogs.html
http://developer.android.com/design/building-blocks/pickers.html
+http://developer.android.com/google/play-services/maps.html
+http://developer.android.com/distribute/googleplay/quality/tablet.html
+http://developer.android.com/distribute/googleplay/spotlight/tablets.html
+http://developer.android.com/distribute/googleplay/quality/core.html
+http://developer.android.com/guide/topics/ui/notifiers/notifications.html
+http://developer.android.com/guide/topics/ui/dialogs.html
+http://developer.android.com/downloads/design/Android_Design_Downloads_20120823.zip
+http://developer.android.com/downloads/design/Android_Design_Fireworks_Stencil_20120814.png
+http://developer.android.com/downloads/design/Android_Design_Illustrator_Vectors_20120814.ai
+http://developer.android.com/downloads/design/Android_Design_OmniGraffle_Stencil_20120814.graffle
+http://developer.android.com/downloads/design/Android_Design_Holo_Widgets_20120814.zip
+http://developer.android.com/downloads/design/Android_Design_Icons_20120814.zip
+http://developer.android.com/downloads/design/Roboto_Hinted_20120823.zip
+http://developer.android.com/downloads/design/Roboto_Specimen_Book_20111129.pdf
+http://developer.android.com/downloads/design/Android_Design_Color_Swatches_20120229.zip
+http://developer.android.com/sdk/installing/bundle.html
+http://developer.android.com/sdk/installing/index.html
+http://developer.android.com/sdk/installing/installing-adt.html
+http://developer.android.com/sdk/installing/adding-packages.html
+http://developer.android.com/sdk/exploring.html
+http://developer.android.com/tools/sdk/ndk/index.html
+http://developer.android.com/tools/workflow/index.html
+http://developer.android.com/tools/devices/index.html
+http://developer.android.com/tools/devices/managing-avds.html
+http://developer.android.com/tools/devices/managing-avds-cmdline.html
+http://developer.android.com/tools/devices/emulator.html
+http://developer.android.com/tools/device.html
+http://developer.android.com/tools/projects/index.html
+http://developer.android.com/tools/projects/projects-eclipse.html
+http://developer.android.com/tools/projects/projects-cmdline.html
+http://developer.android.com/tools/building/index.html
+http://developer.android.com/tools/building/building-eclipse.html
+http://developer.android.com/tools/building/building-cmdline.html
+http://developer.android.com/tools/testing/index.html
+http://developer.android.com/tools/testing/testing_android.html
+http://developer.android.com/tools/testing/testing_eclipse.html
+http://developer.android.com/tools/testing/testing_otheride.html
+http://developer.android.com/tools/testing/activity_testing.html
+http://developer.android.com/tools/testing/service_testing.html
+http://developer.android.com/tools/testing/contentprovider_testing.html
+http://developer.android.com/tools/testing/testing_accessibility.html
+http://developer.android.com/tools/testing/testing_ui.html
+http://developer.android.com/tools/testing/what_to_test.html
+http://developer.android.com/tools/testing/activity_test.html
+http://developer.android.com/tools/debugging/index.html
+http://developer.android.com/tools/debugging/debugging-projects.html
+http://developer.android.com/tools/debugging/debugging-projects-cmdline.html
+http://developer.android.com/tools/debugging/ddms.html
+http://developer.android.com/tools/debugging/debugging-log.html
+http://developer.android.com/tools/debugging/improving-w-lint.html
+http://developer.android.com/tools/debugging/debugging-ui.html
+http://developer.android.com/tools/debugging/debugging-tracing.html
+http://developer.android.com/tools/debugging/systrace.html
+http://developer.android.com/tools/debugging/debugging-devtools.html
+http://developer.android.com/tools/publishing/publishing_overview.html
+http://developer.android.com/tools/publishing/preparing.html
+http://developer.android.com/tools/publishing/versioning.html
+http://developer.android.com/tools/publishing/app-signing.html
+http://developer.android.com/tools/help/index.html
+http://developer.android.com/tools/help/adb.html
+http://developer.android.com/tools/help/adt.html
+http://developer.android.com/tools/help/android.html
+http://developer.android.com/tools/help/avd-manager.html
+http://developer.android.com/tools/help/bmgr.html
+http://developer.android.com/tools/help/monitor.html
+http://developer.android.com/tools/help/dmtracedump.html
+http://developer.android.com/tools/help/draw9patch.html
+http://developer.android.com/tools/help/emulator.html
+http://developer.android.com/tools/help/etc1tool.html
+http://developer.android.com/tools/help/hierarchy-viewer.html
+http://developer.android.com/tools/help/hprof-conv.html
+http://developer.android.com/tools/help/jobb.html
+http://developer.android.com/tools/help/lint.html
+http://developer.android.com/tools/help/logcat.html
+http://developer.android.com/tools/help/mksdcard.html
+http://developer.android.com/tools/help/monkey.html
+http://developer.android.com/tools/help/monkeyrunner_concepts.html
+http://developer.android.com/tools/help/MonkeyDevice.html
+http://developer.android.com/tools/help/MonkeyImage.html
+http://developer.android.com/tools/help/MonkeyRunner.html
+http://developer.android.com/tools/help/proguard.html
+http://developer.android.com/tools/help/sdk-manager.html
+http://developer.android.com/tools/help/systrace.html
+http://developer.android.com/tools/help/gltracer.html
+http://developer.android.com/tools/help/traceview.html
+http://developer.android.com/tools/help/uiautomator/index.html
+http://developer.android.com/tools/help/uiautomator/IAutomationSupport.html
+http://developer.android.com/tools/help/uiautomator/UiAutomatorTestCase.html
+http://developer.android.com/tools/help/uiautomator/UiCollection.html
+http://developer.android.com/tools/help/uiautomator/UiDevice.html
+http://developer.android.com/tools/help/uiautomator/UiObject.html
+http://developer.android.com/tools/help/uiautomator/UiObjectNotFoundException.html
+http://developer.android.com/tools/help/uiautomator/UiScrollable.html
+http://developer.android.com/tools/help/uiautomator/UiSelector.html
+http://developer.android.com/tools/help/uiautomator/UiWatcher.html
+http://developer.android.com/tools/help/zipalign.html
+http://developer.android.com/tools/revisions/index.html
+http://developer.android.com/tools/sdk/tools-notes.html
+http://developer.android.com/tools/sdk/eclipse-adt.html
+http://developer.android.com/tools/revisions/platforms.html
+http://developer.android.com/tools/extras/index.html
+http://developer.android.com/tools/extras/support-library.html
+http://developer.android.com/tools/extras/oem-usb.html
+http://developer.android.com/tools/samples/index.html
+http://developer.android.com/tools/adk/index.html
+http://developer.android.com/tools/adk/adk2.html
+http://developer.android.com/tools/adk/adk.html
http://developer.android.com/distribute/googleplay/about/visibility.html
http://developer.android.com/distribute/googleplay/about/monetizing.html
http://developer.android.com/distribute/googleplay/about/distribution.html
http://developer.android.com/distribute/googleplay/publish/register.html
http://developer.android.com/distribute/googleplay/publish/console.html
http://developer.android.com/distribute/googleplay/publish/preparing.html
-http://developer.android.com/distribute/googleplay/strategies/app-quality.html
http://developer.android.com/distribute/googleplay/promote/linking.html
http://developer.android.com/distribute/googleplay/promote/badges.html
-http://developer.android.com/distribute/googleplay/promote/brand.html
http://developer.android.com/distribute/promote/device-art.html
+http://developer.android.com/distribute/googleplay/promote/brand.html
+http://developer.android.com/distribute/googleplay/strategies/app-quality.html
+http://developer.android.com/google/play/billing/index.html
+http://developer.android.com/google/play/licensing/index.html
http://developer.android.com/about/start.html
+http://developer.android.com/about/versions/android-4.2.html
http://developer.android.com/about/versions/android-4.1.html
http://developer.android.com/about/versions/android-4.0-highlights.html
http://developer.android.com/about/versions/android-4.0.3.html
@@ -83,6 +197,7 @@
http://developer.android.com/about/versions/android-2.3.4.html
http://developer.android.com/about/versions/android-2.3.3.html
http://developer.android.com/about/dashboards/index.html
+http://developer.android.com/google/gcm/index.html
http://developer.android.com/guide/components/fundamentals.html
http://developer.android.com/guide/components/activities.html
http://developer.android.com/guide/components/fragments.html
@@ -95,6 +210,7 @@
http://developer.android.com/guide/topics/providers/content-provider-basics.html
http://developer.android.com/guide/topics/providers/content-provider-creating.html
http://developer.android.com/guide/topics/providers/calendar-provider.html
+http://developer.android.com/guide/topics/providers/contacts-provider.html
http://developer.android.com/guide/components/intents-filters.html
http://developer.android.com/guide/components/processes-and-threads.html
http://developer.android.com/guide/topics/security/permissions.html
@@ -143,12 +259,9 @@
http://developer.android.com/guide/topics/ui/controls/pickers.html
http://developer.android.com/guide/topics/ui/ui-events.html
http://developer.android.com/guide/topics/ui/menus.html
-http://developer.android.com/guide/topics/ui/dialogs.html
http://developer.android.com/guide/topics/ui/actionbar.html
http://developer.android.com/guide/topics/ui/settings.html
-http://developer.android.com/guide/topics/ui/notifiers/index.html
http://developer.android.com/guide/topics/ui/notifiers/toasts.html
-http://developer.android.com/guide/topics/ui/notifiers/notifications.html
http://developer.android.com/guide/topics/search/index.html
http://developer.android.com/guide/topics/search/search-dialog.html
http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html
@@ -157,6 +270,7 @@
http://developer.android.com/guide/topics/ui/drag-drop.html
http://developer.android.com/guide/topics/ui/accessibility/index.html
http://developer.android.com/guide/topics/ui/accessibility/apps.html
+http://developer.android.com/guide/topics/ui/accessibility/checklist.html
http://developer.android.com/guide/topics/ui/accessibility/services.html
http://developer.android.com/guide/topics/ui/themes.html
http://developer.android.com/guide/topics/ui/custom-components.html
@@ -232,41 +346,345 @@
http://developer.android.com/guide/practices/screens-distribution.html
http://developer.android.com/guide/practices/screen-compat-mode.html
http://developer.android.com/guide/practices/tablets-and-handsets.html
-http://developer.android.com/guide/practices/performance.html
-http://developer.android.com/guide/practices/jni.html
-http://developer.android.com/guide/practices/responsiveness.html
-http://developer.android.com/guide/practices/seamlessness.html
-http://developer.android.com/guide/practices/security.html
-http://developer.android.com/guide/google/index.html
-http://developer.android.com/guide/google/play/billing/billing_overview.html
-http://developer.android.com/guide/google/play/billing/billing_integrate.html
-http://developer.android.com/guide/google/play/billing/billing_subscriptions.html
-http://developer.android.com/guide/google/play/billing/billing_best_practices.html
-http://developer.android.com/guide/google/play/billing/billing_testing.html
-http://developer.android.com/guide/google/play/billing/billing_admin.html
-http://developer.android.com/guide/google/play/billing/billing_reference.html
-http://developer.android.com/guide/google/play/licensing/index.html
-http://developer.android.com/guide/google/play/licensing/overview.html
-http://developer.android.com/guide/google/play/licensing/setting-up.html
-http://developer.android.com/guide/google/play/licensing/adding-licensing.html
-http://developer.android.com/guide/google/play/licensing/licensing-reference.html
-http://developer.android.com/guide/google/play/services.html
-http://developer.android.com/guide/google/play/filters.html
-http://developer.android.com/guide/google/play/publishing/multiple-apks.html
-http://developer.android.com/guide/google/play/expansion-files.html
-http://developer.android.com/guide/google/gcm/index.html
-http://developer.android.com/guide/google/gcm/gs.html
-http://developer.android.com/guide/google/gcm/gcm.html
-http://developer.android.com/guide/google/gcm/demo.html
-http://developer.android.com/guide/google/gcm/adv.html
-http://developer.android.com/guide/google/gcm/c2dm.html
http://developer.android.com/training/basics/activity-lifecycle/index.html
http://developer.android.com/training/basics/fragments/index.html
http://developer.android.com/training/sharing/index.html
+http://developer.android.com/training/basics/firstapp/index.html
+http://developer.android.com/training/basics/firstapp/creating-project.html
+http://developer.android.com/training/basics/firstapp/running-app.html
+http://developer.android.com/training/basics/firstapp/building-ui.html
+http://developer.android.com/training/basics/firstapp/starting-activity.html
+http://developer.android.com/training/basics/activity-lifecycle/starting.html
+http://developer.android.com/training/basics/activity-lifecycle/pausing.html
+http://developer.android.com/training/basics/activity-lifecycle/stopping.html
+http://developer.android.com/training/basics/activity-lifecycle/recreating.html
+http://developer.android.com/training/basics/supporting-devices/index.html
+http://developer.android.com/training/basics/supporting-devices/languages.html
+http://developer.android.com/training/basics/supporting-devices/screens.html
+http://developer.android.com/training/basics/supporting-devices/platforms.html
+http://developer.android.com/training/basics/fragments/support-lib.html
+http://developer.android.com/training/basics/fragments/creating.html
+http://developer.android.com/training/basics/fragments/fragment-ui.html
+http://developer.android.com/training/basics/fragments/communicating.html
+http://developer.android.com/training/basics/data-storage/index.html
+http://developer.android.com/training/basics/data-storage/shared-preferences.html
+http://developer.android.com/training/basics/data-storage/files.html
+http://developer.android.com/training/basics/data-storage/databases.html
+http://developer.android.com/training/basics/intents/index.html
+http://developer.android.com/training/basics/intents/sending.html
+http://developer.android.com/training/basics/intents/result.html
+http://developer.android.com/training/basics/intents/filters.html
+http://developer.android.com/training/sharing/send.html
+http://developer.android.com/training/sharing/receive.html
+http://developer.android.com/training/sharing/shareaction.html
+http://developer.android.com/training/building-multimedia.html
+http://developer.android.com/training/managing-audio/index.html
+http://developer.android.com/training/managing-audio/volume-playback.html
+http://developer.android.com/training/managing-audio/audio-focus.html
+http://developer.android.com/training/managing-audio/audio-output.html
+http://developer.android.com/training/camera/index.html
+http://developer.android.com/training/camera/photobasics.html
+http://developer.android.com/training/camera/videobasics.html
+http://developer.android.com/training/camera/cameradirect.html
+http://developer.android.com/training/building-graphics.html
+http://developer.android.com/training/displaying-bitmaps/index.html
+http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
+http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
+http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
+http://developer.android.com/training/displaying-bitmaps/display-bitmap.html
+http://developer.android.com/training/graphics/opengl/index.html
+http://developer.android.com/training/graphics/opengl/environment.html
+http://developer.android.com/training/graphics/opengl/shapes.html
+http://developer.android.com/training/graphics/opengl/draw.html
+http://developer.android.com/training/graphics/opengl/projection.html
+http://developer.android.com/training/graphics/opengl/motion.html
+http://developer.android.com/training/graphics/opengl/touch.html
+http://developer.android.com/training/animation/index.html
+http://developer.android.com/training/animation/crossfade.html
+http://developer.android.com/training/animation/screen-slide.html
+http://developer.android.com/training/animation/cardflip.html
+http://developer.android.com/training/animation/zoom.html
+http://developer.android.com/training/animation/layout.html
+http://developer.android.com/training/building-connectivity.html
+http://developer.android.com/training/connect-devices-wirelessly/index.html
+http://developer.android.com/training/connect-devices-wirelessly/nsd.html
+http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html
+http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html
+http://developer.android.com/training/basics/network-ops/index.html
+http://developer.android.com/training/basics/network-ops/connecting.html
+http://developer.android.com/training/basics/network-ops/managing.html
+http://developer.android.com/training/basics/network-ops/xml.html
+http://developer.android.com/training/efficient-downloads/index.html
+http://developer.android.com/training/efficient-downloads/efficient-network-access.html
+http://developer.android.com/training/efficient-downloads/regular_updates.html
+http://developer.android.com/training/efficient-downloads/redundant_redundant.html
+http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
+http://developer.android.com/training/cloudsync/index.html
+http://developer.android.com/training/cloudsync/backupapi.html
+http://developer.android.com/training/cloudsync/gcm.html
+http://developer.android.com/training/building-userinfo.html
+http://developer.android.com/training/id-auth/index.html
+http://developer.android.com/training/id-auth/identify.html
+http://developer.android.com/training/id-auth/authenticate.html
+http://developer.android.com/training/id-auth/custom_auth.html
+http://developer.android.com/training/basics/location/index.html
+http://developer.android.com/training/basics/location/locationmanager.html
+http://developer.android.com/training/basics/location/currentlocation.html
+http://developer.android.com/training/basics/location/geocoding.html
+http://developer.android.com/training/best-ux.html
+http://developer.android.com/training/design-navigation/index.html
+http://developer.android.com/training/design-navigation/screen-planning.html
+http://developer.android.com/training/design-navigation/multiple-sizes.html
+http://developer.android.com/training/design-navigation/descendant-lateral.html
+http://developer.android.com/training/design-navigation/ancestral-temporal.html
+http://developer.android.com/training/design-navigation/wireframing.html
+http://developer.android.com/training/implementing-navigation/index.html
+http://developer.android.com/training/implementing-navigation/lateral.html
+http://developer.android.com/training/implementing-navigation/ancestral.html
+http://developer.android.com/training/implementing-navigation/temporal.html
+http://developer.android.com/training/implementing-navigation/descendant.html
+http://developer.android.com/training/notify-user/index.html
+http://developer.android.com/training/notify-user/build-notification.html
+http://developer.android.com/training/notify-user/navigation.html
+http://developer.android.com/training/notify-user/managing.html
+http://developer.android.com/training/notify-user/expanded.html
+http://developer.android.com/training/notify-user/display-progress.html
+http://developer.android.com/training/search/index.html
+http://developer.android.com/training/search/setup.html
+http://developer.android.com/training/search/search.html
+http://developer.android.com/training/search/backward-compat.html
+http://developer.android.com/training/multiscreen/index.html
+http://developer.android.com/training/multiscreen/screensizes.html
+http://developer.android.com/training/multiscreen/screendensities.html
+http://developer.android.com/training/multiscreen/adaptui.html
+http://developer.android.com/training/tv/index.html
+http://developer.android.com/training/tv/optimizing-layouts-tv.html
+http://developer.android.com/training/tv/optimizing-navigation-tv.html
+http://developer.android.com/training/tv/unsupported-features-tv.html
+http://developer.android.com/training/custom-views/index.html
+http://developer.android.com/training/custom-views/create-view.html
+http://developer.android.com/training/custom-views/custom-drawing.html
+http://developer.android.com/training/custom-views/making-interactive.html
+http://developer.android.com/training/custom-views/optimizing-view.html
+http://developer.android.com/training/backward-compatible-ui/index.html
+http://developer.android.com/training/backward-compatible-ui/abstracting.html
+http://developer.android.com/training/backward-compatible-ui/new-implementation.html
+http://developer.android.com/training/backward-compatible-ui/older-implementation.html
+http://developer.android.com/training/backward-compatible-ui/using-component.html
+http://developer.android.com/training/accessibility/index.html
+http://developer.android.com/training/accessibility/accessible-app.html
+http://developer.android.com/training/accessibility/service.html
+http://developer.android.com/training/best-performance.html
+http://developer.android.com/training/articles/perf-tips.html
+http://developer.android.com/training/improving-layouts/index.html
+http://developer.android.com/training/improving-layouts/optimizing-layout.html
+http://developer.android.com/training/improving-layouts/reusing-layouts.html
+http://developer.android.com/training/improving-layouts/loading-ondemand.html
+http://developer.android.com/training/improving-layouts/smooth-scrolling.html
+http://developer.android.com/training/monitoring-device-state/index.html
+http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
+http://developer.android.com/training/monitoring-device-state/docking-monitoring.html
+http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
+http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
+http://developer.android.com/training/articles/perf-anr.html
+http://developer.android.com/training/articles/perf-jni.html
+http://developer.android.com/training/articles/smp.html
+http://developer.android.com/training/best-security.html
+http://developer.android.com/training/articles/security-tips.html
+http://developer.android.com/training/enterprise/index.html
+http://developer.android.com/training/enterprise/device-management-policy.html
+http://developer.android.com/training/distribute.html
+http://developer.android.com/training/in-app-billing/index.html
+http://developer.android.com/training/in-app-billing/preparing-iab-app.html
+http://developer.android.com/training/in-app-billing/list-iab-products.html
+http://developer.android.com/training/in-app-billing/purchase-iab-products.html
+http://developer.android.com/training/in-app-billing/test-iab-app.html
+http://developer.android.com/training/multiple-apks/index.html
+http://developer.android.com/training/multiple-apks/api.html
+http://developer.android.com/training/multiple-apks/screensize.html
+http://developer.android.com/training/multiple-apks/texture.html
+http://developer.android.com/training/multiple-apks/multiple.html
+http://developer.android.com/training/monetization/index.html
+http://developer.android.com/training/monetization/ads-and-ux.html
+http://developer.android.com/reference/android/app/DialogFragment.html
+http://developer.android.com/reference/android/app/AlertDialog.html
+http://developer.android.com/reference/android/app/Dialog.html
+http://developer.android.com/reference/android/app/DatePickerDialog.html
+http://developer.android.com/reference/android/app/TimePickerDialog.html
+http://developer.android.com/reference/android/app/ProgressDialog.html
+http://developer.android.com/reference/android/widget/ProgressBar.html
+http://developer.android.com/reference/android/support/v4/app/DialogFragment.html
+http://developer.android.com/reference/android/support/v4/app/Fragment.html
+http://developer.android.com/reference/android/app/AlertDialog.Builder.html
+http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
+http://developer.android.com/reference/android/widget/ListAdapter.html
+http://developer.android.com/reference/android/support/v4/content/Loader.html
+http://developer.android.com/reference/java/util/ArrayList.html
+http://developer.android.com/reference/android/widget/EditText.html
+http://developer.android.com/reference/android/view/LayoutInflater.html
+http://developer.android.com/reference/android/app/Activity.html
+http://developer.android.com/reference/android/R.style.html
+http://developer.android.com/reference/android/support/v4/app/FragmentManager.html
+http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html
+http://developer.android.com/reference/android/app/Fragment.html
+http://developer.android.com/reference/android/view/TouchDelegate.html
+http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
+http://developer.android.com/google/play/publishing/multiple-apks.html
+http://developer.android.com/google/play-services/index.html
+http://developer.android.com/google/play-services/setup.html
+http://developer.android.com/google/play-services/auth.html
+http://developer.android.com/google/play-services/plus.html
+http://developer.android.com/reference/gms-packages.html
+http://developer.android.com/google/play/billing/billing_overview.html
+http://developer.android.com/google/play/billing/api.html
+http://developer.android.com/google/play/billing/billing_integrate.html
+http://developer.android.com/google/play/billing/billing_reference.html
+http://developer.android.com/google/play/billing/v2/api.html
+http://developer.android.com/google/play/billing/v2/billing_integrate.html
+http://developer.android.com/google/play/billing/v2/billing_subscriptions.html
+http://developer.android.com/google/play/billing/v2/billing_reference.html
+http://developer.android.com/google/play/billing/billing_best_practices.html
+http://developer.android.com/google/play/billing/billing_testing.html
+http://developer.android.com/google/play/billing/billing_admin.html
+http://developer.android.com/google/play/billing/versions.html
+http://developer.android.com/google/play/dist.html
+http://developer.android.com/google/play/filters.html
+http://developer.android.com/google/play/expansion-files.html
+http://developer.android.com/google/play/licensing/overview.html
+http://developer.android.com/google/play/licensing/setting-up.html
+http://developer.android.com/google/play/licensing/adding-licensing.html
+http://developer.android.com/google/play/licensing/licensing-reference.html
+http://developer.android.com/google/gcm/gs.html
+http://developer.android.com/google/gcm/gcm.html
+http://developer.android.com/google/gcm/demo.html
+http://developer.android.com/google/gcm/adv.html
+http://developer.android.com/google/gcm/c2dm.html
+http://developer.android.com/reference/gcm-packages.html
+http://developer.android.com/google/backup/index.html
+http://developer.android.com/google/backup/signup.html
+http://developer.android.com/guide/practices/responsiveness.html
+http://developer.android.com/reference/android/os/StrictMode.html
+http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.Builder.html
+http://developer.android.com/resources/faq/troubleshooting.html
+http://developer.android.com/reference/android/content/Intent.html
+http://developer.android.com/reference/android/content/IntentFilter.html
+http://developer.android.com/reference/android/content/BroadcastReceiver.html
+http://developer.android.com/reference/android/content/pm/PackageManager.html
+http://developer.android.com/reference/android/content/Context.html
+http://developer.android.com/reference/android/content/ComponentName.html
+http://developer.android.com/reference/android/os/Bundle.html
+http://developer.android.com/guide/appendix/g-app-intents.html
+http://developer.android.com/resources/samples/index.html
+http://developer.android.com/resources/samples/NotePad/index.html
+http://developer.android.com/reference/android/view/Menu.html
+http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
+http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
+http://developer.android.com/reference/junit/framework/TestSuite.html
+http://developer.android.com/reference/android/test/package-summary.html
+http://developer.android.com/reference/junit/framework/TestCase.html
+http://developer.android.com/reference/android/test/InstrumentationTestCase.html
+http://developer.android.com/reference/android/test/PerformanceTestCase.html
+http://developer.android.com/reference/java/lang/String.html
+http://developer.android.com/reference/android/content/res/Resources.html
+http://developer.android.com/reference/android/text/Html.html
+http://developer.android.com/reference/android/text/TextUtils.html
+http://developer.android.com/reference/android/animation/ValueAnimator.html
+http://developer.android.com/reference/android/animation/ObjectAnimator.html
+http://developer.android.com/reference/android/animation/TypeEvaluator.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html
+http://developer.android.com/reference/android/animation/TimeInterpolator.html
+http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
+http://developer.android.com/reference/android/animation/IntEvaluator.html
+http://developer.android.com/reference/android/view/View.html
+http://developer.android.com/reference/android/animation/package-summary.html
+http://developer.android.com/reference/android/view/animation/package-summary.html
+http://developer.android.com/reference/android/animation/Animator.html
+http://developer.android.com/reference/android/animation/AnimatorSet.html
+http://developer.android.com/reference/android/animation/FloatEvaluator.html
+http://developer.android.com/reference/android/animation/ArgbEvaluator.html
+http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/AnticipateInterpolator.html
+http://developer.android.com/reference/android/view/animation/AnticipateOvershootInterpolator.html
+http://developer.android.com/reference/android/view/animation/BounceInterpolator.html
+http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
+http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
+http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
+http://developer.android.com/reference/android/view/animation/OvershootInterpolator.html
+http://developer.android.com/reference/android/animation/ValueAnimator.AnimatorUpdateListener.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html
+http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html
+http://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html
+http://developer.android.com/reference/android/animation/LayoutTransition.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animations_by_default.html
+http://developer.android.com/reference/android/animation/Keyframe.html
+http://developer.android.com/reference/android/animation/PropertyValuesHolder.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html
+http://developer.android.com/reference/android/view/ViewPropertyAnimator.html
+http://developer.android.com/shareables/training/DeviceManagement.zip
+http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
+http://developer.android.com/reference/java/lang/SecurityException.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.html
+http://developer.android.com/reference/android/app/PendingIntent.html
+http://developer.android.com/reference/android/app/NotificationManager.html
+http://developer.android.com/reference/java/lang/Object.html
+http://developer.android.com/reference/android/app/Notification.html
+http://developer.android.com/reference/android/os/Build.html
+http://developer.android.com/reference/android/app/ActionBar.html
+http://developer.android.com/resources/samples/SpellChecker/SampleSpellCheckerService/index.html
+http://developer.android.com/resources/samples/SpellChecker/HelloSpellChecker/index.html
+http://developer.android.com/reference/android/service/textservice/SpellCheckerService.html
+http://developer.android.com/reference/android/app/Service.html
+http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html
+http://developer.android.com/reference/android/view/textservice/SentenceSuggestionsInfo.html
+http://developer.android.com/reference/android/Manifest.permission.html
+http://developer.android.com/reference/android/widget/TextView.html
+http://developer.android.com/shareables/training/TabCompat.zip
+http://developer.android.com/reference/java/lang/VerifyError.html
+http://developer.android.com/reference/android/app/ActionBar.Tab.html
+http://developer.android.com/reference/android/widget/LinearLayout.html
+http://developer.android.com/reference/android/widget/ListView.html
+http://developer.android.com/reference/android/widget/GridView.html
+http://developer.android.com/tools/help/layoutopt.html
+http://developer.android.com/reference/android/widget/RelativeLayout.html
+http://developer.android.com/reference/android/widget/ImageView.html
+http://developer.android.com/reference/android/widget/FrameLayout.html
+http://developer.android.com/reference/android/widget/ScrollView.html
+http://developer.android.com/reference/android/widget/GridLayout.html
+http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
+http://developer.android.com/reference/android/accounts/AccountManager.html
+http://developer.android.com/reference/android/net/Uri.html
+http://developer.android.com/reference/java/util/List.html
+http://developer.android.com/reference/android/graphics/NinePatch.html
+http://developer.android.com/reference/android/hardware/usb/package-summary.html
+http://developer.android.com/reference/android/hardware/usb/UsbManager.html
+http://developer.android.com/reference/android/hardware/usb/UsbAccessory.html
+http://developer.android.com/reference/java/io/FileInputStream.html
+http://developer.android.com/reference/java/io/FileOutputStream.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
+http://developer.android.com/guide/practices/optimizing-for-3.0.html
+http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
+http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
+http://developer.android.com/reference/junit/framework/Assert.html
+http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
+http://developer.android.com/reference/android/test/mock/package-summary.html
+http://developer.android.com/reference/android/test/mock/MockApplication.html
+http://developer.android.com/reference/android/test/ViewAsserts.html
+http://developer.android.com/shareables/training/Animations.zip
+http://developer.android.com/reference/android/R.integer.html
+http://developer.android.com/shareables/training/NotifyUser.zip
+http://developer.android.com/reference/android/os/PatternMatcher.html
+http://developer.android.com/reference/android/widget/TabWidget.html
+http://developer.android.com/reference/android/widget/TabHost.html
+http://developer.android.com/reference/android/app/FragmentTransaction.html
+http://developer.android.com/reference/android/app/FragmentManager.html
+http://developer.android.com/reference/android/app/FragmentManager.OnBackStackChangedListener.html
+http://developer.android.com/reference/android/webkit/WebView.html
http://developer.android.com/reference/android/package-summary.html
http://developer.android.com/reference/android/accessibilityservice/package-summary.html
http://developer.android.com/reference/android/accounts/package-summary.html
-http://developer.android.com/reference/android/animation/package-summary.html
http://developer.android.com/reference/android/app/package-summary.html
http://developer.android.com/reference/android/app/admin/package-summary.html
http://developer.android.com/reference/android/app/backup/package-summary.html
@@ -283,8 +701,8 @@
http://developer.android.com/reference/android/graphics/drawable/package-summary.html
http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
http://developer.android.com/reference/android/hardware/package-summary.html
+http://developer.android.com/reference/android/hardware/display/package-summary.html
http://developer.android.com/reference/android/hardware/input/package-summary.html
-http://developer.android.com/reference/android/hardware/usb/package-summary.html
http://developer.android.com/reference/android/inputmethodservice/package-summary.html
http://developer.android.com/reference/android/location/package-summary.html
http://developer.android.com/reference/android/media/package-summary.html
@@ -309,12 +727,12 @@
http://developer.android.com/reference/android/renderscript/package-summary.html
http://developer.android.com/reference/android/sax/package-summary.html
http://developer.android.com/reference/android/security/package-summary.html
+http://developer.android.com/reference/android/service/dreams/package-summary.html
http://developer.android.com/reference/android/service/textservice/package-summary.html
http://developer.android.com/reference/android/service/wallpaper/package-summary.html
http://developer.android.com/reference/android/speech/package-summary.html
http://developer.android.com/reference/android/speech/tts/package-summary.html
http://developer.android.com/reference/android/support/v13/app/package-summary.html
-http://developer.android.com/reference/android/support/v13/dreams/package-summary.html
http://developer.android.com/reference/android/support/v4/accessibilityservice/package-summary.html
http://developer.android.com/reference/android/support/v4/app/package-summary.html
http://developer.android.com/reference/android/support/v4/content/package-summary.html
@@ -329,8 +747,6 @@
http://developer.android.com/reference/android/telephony/package-summary.html
http://developer.android.com/reference/android/telephony/cdma/package-summary.html
http://developer.android.com/reference/android/telephony/gsm/package-summary.html
-http://developer.android.com/reference/android/test/package-summary.html
-http://developer.android.com/reference/android/test/mock/package-summary.html
http://developer.android.com/reference/android/test/suitebuilder/package-summary.html
http://developer.android.com/reference/android/text/package-summary.html
http://developer.android.com/reference/android/text/format/package-summary.html
@@ -340,7 +756,6 @@
http://developer.android.com/reference/android/util/package-summary.html
http://developer.android.com/reference/android/view/package-summary.html
http://developer.android.com/reference/android/view/accessibility/package-summary.html
-http://developer.android.com/reference/android/view/animation/package-summary.html
http://developer.android.com/reference/android/view/inputmethod/package-summary.html
http://developer.android.com/reference/android/view/textservice/package-summary.html
http://developer.android.com/reference/android/webkit/package-summary.html
@@ -441,322 +856,507 @@
http://developer.android.com/reference/org/xml/sax/helpers/package-summary.html
http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
-http://developer.android.com/reference/classes.html
-http://developer.android.com/reference/android/animation/TypeEvaluator.html
-http://developer.android.com/guide/topics/graphics/renderscript.html
-http://developer.android.com/tools/testing/index.html
-http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
-http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
-http://developer.android.com/sdk/installing/index.html
-http://developer.android.com/sdk/installing/adding-packages.html
-http://developer.android.com/sdk/installing/installing-adt.html
-http://developer.android.com/sdk/exploring.html
-http://developer.android.com/tools/sdk/ndk/index.html
-http://developer.android.com/tools/workflow/index.html
-http://developer.android.com/tools/devices/index.html
-http://developer.android.com/tools/devices/managing-avds.html
-http://developer.android.com/tools/devices/managing-avds-cmdline.html
-http://developer.android.com/tools/devices/emulator.html
-http://developer.android.com/tools/device.html
-http://developer.android.com/tools/projects/index.html
-http://developer.android.com/tools/projects/projects-eclipse.html
-http://developer.android.com/tools/projects/projects-cmdline.html
-http://developer.android.com/tools/building/index.html
-http://developer.android.com/tools/building/building-eclipse.html
-http://developer.android.com/tools/building/building-cmdline.html
-http://developer.android.com/tools/testing/testing_android.html
-http://developer.android.com/tools/testing/testing_eclipse.html
-http://developer.android.com/tools/testing/testing_otheride.html
-http://developer.android.com/tools/testing/activity_testing.html
-http://developer.android.com/tools/testing/service_testing.html
-http://developer.android.com/tools/testing/contentprovider_testing.html
-http://developer.android.com/tools/testing/what_to_test.html
-http://developer.android.com/tools/testing/activity_test.html
-http://developer.android.com/tools/debugging/index.html
-http://developer.android.com/tools/debugging/debugging-projects.html
-http://developer.android.com/tools/debugging/debugging-projects-cmdline.html
-http://developer.android.com/tools/debugging/ddms.html
-http://developer.android.com/tools/debugging/debugging-log.html
-http://developer.android.com/tools/debugging/improving-w-lint.html
-http://developer.android.com/tools/debugging/debugging-ui.html
-http://developer.android.com/tools/debugging/debugging-tracing.html
-http://developer.android.com/tools/debugging/debugging-devtools.html
-http://developer.android.com/tools/publishing/publishing_overview.html
-http://developer.android.com/tools/publishing/preparing.html
-http://developer.android.com/tools/publishing/versioning.html
-http://developer.android.com/tools/publishing/app-signing.html
-http://developer.android.com/tools/help/index.html
-http://developer.android.com/tools/help/adb.html
-http://developer.android.com/tools/help/adt.html
-http://developer.android.com/tools/help/android.html
-http://developer.android.com/tools/help/bmgr.html
-http://developer.android.com/tools/help/monitor.html
-http://developer.android.com/tools/help/dmtracedump.html
-http://developer.android.com/tools/help/draw9patch.html
-http://developer.android.com/tools/help/emulator.html
-http://developer.android.com/tools/help/etc1tool.html
-http://developer.android.com/tools/help/hierarchy-viewer.html
-http://developer.android.com/tools/help/hprof-conv.html
-http://developer.android.com/tools/help/lint.html
-http://developer.android.com/tools/help/logcat.html
-http://developer.android.com/tools/help/mksdcard.html
-http://developer.android.com/tools/help/monkey.html
-http://developer.android.com/tools/help/monkeyrunner_concepts.html
-http://developer.android.com/tools/help/MonkeyDevice.html
-http://developer.android.com/tools/help/MonkeyImage.html
-http://developer.android.com/tools/help/MonkeyRunner.html
-http://developer.android.com/tools/help/proguard.html
-http://developer.android.com/tools/help/gltracer.html
-http://developer.android.com/tools/help/traceview.html
-http://developer.android.com/tools/help/zipalign.html
-http://developer.android.com/tools/revisions/index.html
-http://developer.android.com/tools/sdk/tools-notes.html
-http://developer.android.com/tools/sdk/eclipse-adt.html
-http://developer.android.com/tools/revisions/platforms.html
-http://developer.android.com/tools/extras/index.html
-http://developer.android.com/tools/extras/support-library.html
-http://developer.android.com/tools/extras/oem-usb.html
-http://developer.android.com/tools/samples/index.html
-http://developer.android.com/tools/adk/index.html
-http://developer.android.com/tools/adk/adk2.html
-http://developer.android.com/tools/adk/adk.html
-http://developer.android.com/tools/adk/aoa.html
-http://developer.android.com/tools/adk/aoa2.html
-http://developer.android.com/training/basics/firstapp/index.html
-http://developer.android.com/training/basics/firstapp/creating-project.html
-http://developer.android.com/training/basics/firstapp/running-app.html
-http://developer.android.com/training/basics/firstapp/building-ui.html
-http://developer.android.com/training/basics/firstapp/starting-activity.html
-http://developer.android.com/training/basics/activity-lifecycle/starting.html
-http://developer.android.com/training/basics/activity-lifecycle/pausing.html
-http://developer.android.com/training/basics/activity-lifecycle/stopping.html
-http://developer.android.com/training/basics/activity-lifecycle/recreating.html
-http://developer.android.com/training/basics/supporting-devices/index.html
-http://developer.android.com/training/basics/supporting-devices/languages.html
-http://developer.android.com/training/basics/supporting-devices/screens.html
-http://developer.android.com/training/basics/supporting-devices/platforms.html
-http://developer.android.com/training/basics/fragments/support-lib.html
-http://developer.android.com/training/basics/fragments/creating.html
-http://developer.android.com/training/basics/fragments/fragment-ui.html
-http://developer.android.com/training/basics/fragments/communicating.html
-http://developer.android.com/training/basics/intents/index.html
-http://developer.android.com/training/basics/intents/sending.html
-http://developer.android.com/training/basics/intents/result.html
-http://developer.android.com/training/basics/intents/filters.html
-http://developer.android.com/training/advanced.html
-http://developer.android.com/training/basics/location/index.html
-http://developer.android.com/training/basics/location/locationmanager.html
-http://developer.android.com/training/basics/location/currentlocation.html
-http://developer.android.com/training/basics/location/geocoding.html
-http://developer.android.com/training/basics/network-ops/index.html
-http://developer.android.com/training/basics/network-ops/connecting.html
-http://developer.android.com/training/basics/network-ops/managing.html
-http://developer.android.com/training/basics/network-ops/xml.html
-http://developer.android.com/training/efficient-downloads/efficient-network-access.html
-http://developer.android.com/training/efficient-downloads/regular_updates.html
-http://developer.android.com/training/efficient-downloads/redundant_redundant.html
-http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
-http://developer.android.com/training/cloudsync/index.html
-http://developer.android.com/training/cloudsync/backupapi.html
-http://developer.android.com/training/cloudsync/gcm.html
-http://developer.android.com/training/multiscreen/index.html
-http://developer.android.com/training/multiscreen/screensizes.html
-http://developer.android.com/training/multiscreen/screendensities.html
-http://developer.android.com/training/multiscreen/adaptui.html
-http://developer.android.com/training/improving-layouts/index.html
-http://developer.android.com/training/improving-layouts/optimizing-layout.html
-http://developer.android.com/training/improving-layouts/reusing-layouts.html
-http://developer.android.com/training/improving-layouts/loading-ondemand.html
-http://developer.android.com/training/improving-layouts/smooth-scrolling.html
-http://developer.android.com/training/managing-audio/index.html
-http://developer.android.com/training/managing-audio/volume-playback.html
-http://developer.android.com/training/managing-audio/audio-focus.html
-http://developer.android.com/training/managing-audio/audio-output.html
-http://developer.android.com/training/monitoring-device-state/index.html
-http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
-http://developer.android.com/training/monitoring-device-state/docking-monitoring.html
-http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
-http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
-http://developer.android.com/training/custom-views/index.html
-http://developer.android.com/training/custom-views/create-view.html
-http://developer.android.com/training/custom-views/custom-drawing.html
-http://developer.android.com/training/custom-views/making-interactive.html
-http://developer.android.com/training/custom-views/optimizing-view.html
-http://developer.android.com/training/search/index.html
-http://developer.android.com/training/search/setup.html
-http://developer.android.com/training/search/search.html
-http://developer.android.com/training/search/backward-compat.html
-http://developer.android.com/training/id-auth/index.html
-http://developer.android.com/training/id-auth/identify.html
-http://developer.android.com/training/id-auth/authenticate.html
-http://developer.android.com/training/id-auth/custom_auth.html
-http://developer.android.com/training/sharing/send.html
-http://developer.android.com/training/sharing/receive.html
-http://developer.android.com/training/sharing/shareaction.html
-http://developer.android.com/training/camera/index.html
-http://developer.android.com/training/camera/photobasics.html
-http://developer.android.com/training/camera/videobasics.html
-http://developer.android.com/training/camera/cameradirect.html
-http://developer.android.com/training/multiple-apks/index.html
-http://developer.android.com/training/multiple-apks/api.html
-http://developer.android.com/training/multiple-apks/screensize.html
-http://developer.android.com/training/multiple-apks/texture.html
-http://developer.android.com/training/multiple-apks/multiple.html
-http://developer.android.com/training/backward-compatible-ui/abstracting.html
-http://developer.android.com/training/backward-compatible-ui/new-implementation.html
-http://developer.android.com/training/backward-compatible-ui/older-implementation.html
-http://developer.android.com/training/backward-compatible-ui/using-component.html
-http://developer.android.com/training/enterprise/index.html
-http://developer.android.com/training/enterprise/device-management-policy.html
-http://developer.android.com/training/monetization/index.html
-http://developer.android.com/training/monetization/ads-and-ux.html
-http://developer.android.com/training/design-navigation/index.html
-http://developer.android.com/training/design-navigation/screen-planning.html
-http://developer.android.com/training/design-navigation/multiple-sizes.html
-http://developer.android.com/training/design-navigation/descendant-lateral.html
-http://developer.android.com/training/design-navigation/ancestral-temporal.html
-http://developer.android.com/training/design-navigation/wireframing.html
-http://developer.android.com/training/implementing-navigation/index.html
-http://developer.android.com/training/implementing-navigation/lateral.html
-http://developer.android.com/training/implementing-navigation/ancestral.html
-http://developer.android.com/training/implementing-navigation/temporal.html
-http://developer.android.com/training/implementing-navigation/descendant.html
-http://developer.android.com/training/tv/index.html
-http://developer.android.com/training/tv/optimizing-layouts-tv.html
-http://developer.android.com/training/tv/optimizing-navigation-tv.html
-http://developer.android.com/training/tv/unsupported-features-tv.html
-http://developer.android.com/training/displaying-bitmaps/index.html
-http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/display-bitmap.html
-http://developer.android.com/training/accessibility/index.html
-http://developer.android.com/training/accessibility/accessible-app.html
-http://developer.android.com/training/accessibility/service.html
-http://developer.android.com/training/graphics/opengl/index.html
-http://developer.android.com/training/graphics/opengl/environment.html
-http://developer.android.com/training/graphics/opengl/shapes.html
-http://developer.android.com/training/graphics/opengl/draw.html
-http://developer.android.com/training/graphics/opengl/projection.html
-http://developer.android.com/training/graphics/opengl/motion.html
-http://developer.android.com/training/graphics/opengl/touch.html
-http://developer.android.com/training/connect-devices-wirelessly/index.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd.html
-http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html
-http://developer.android.com/
-http://developer.android.com/reference/android/app/Instrumentation.html
-http://developer.android.com/tools/help/ddms.html
-http://developer.android.com/reference/android/widget/QuickContactBadge.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
-http://developer.android.com/reference/org/w3c/dom/Attr.html
-http://developer.android.com/reference/org/w3c/dom/CDATASection.html
-http://developer.android.com/reference/org/w3c/dom/CharacterData.html
-http://developer.android.com/reference/org/w3c/dom/Comment.html
-http://developer.android.com/reference/org/w3c/dom/Document.html
-http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentType.html
-http://developer.android.com/reference/org/w3c/dom/DOMConfiguration.html
-http://developer.android.com/reference/org/w3c/dom/DOMError.html
-http://developer.android.com/reference/org/w3c/dom/DOMErrorHandler.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationList.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationSource.html
-http://developer.android.com/reference/org/w3c/dom/DOMLocator.html
-http://developer.android.com/reference/org/w3c/dom/DOMStringList.html
-http://developer.android.com/reference/org/w3c/dom/Element.html
-http://developer.android.com/reference/org/w3c/dom/Entity.html
-http://developer.android.com/reference/org/w3c/dom/EntityReference.html
-http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
-http://developer.android.com/reference/org/w3c/dom/NameList.html
-http://developer.android.com/reference/org/w3c/dom/Node.html
-http://developer.android.com/reference/org/w3c/dom/NodeList.html
-http://developer.android.com/reference/org/w3c/dom/Notation.html
-http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
-http://developer.android.com/reference/org/w3c/dom/Text.html
-http://developer.android.com/reference/org/w3c/dom/TypeInfo.html
-http://developer.android.com/reference/org/w3c/dom/UserDataHandler.html
-http://developer.android.com/reference/org/w3c/dom/DOMException.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
-http://developer.android.com/reference/android/preference/Preference.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.html
-http://developer.android.com/reference/android/view/View.html
-http://developer.android.com/reference/android/preference/CheckBoxPreference.html
-http://developer.android.com/reference/android/preference/ListPreference.html
-http://developer.android.com/reference/android/content/SharedPreferences.html
-http://developer.android.com/reference/java/util/Set.html
-http://developer.android.com/reference/android/app/Activity.html
-http://developer.android.com/reference/android/app/Fragment.html
-http://developer.android.com/reference/android/preference/EditTextPreference.html
-http://developer.android.com/reference/android/widget/EditText.html
-http://developer.android.com/reference/java/lang/String.html
-http://developer.android.com/reference/android/preference/PreferenceScreen.html
-http://developer.android.com/reference/android/preference/PreferenceCategory.html
-http://developer.android.com/reference/android/content/Intent.html
-http://developer.android.com/reference/android/content/Context.html
-http://developer.android.com/reference/android/preference/PreferenceManager.html
-http://developer.android.com/reference/android/os/Bundle.html
-http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
-http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
-http://developer.android.com/reference/android/preference/DialogPreference.html
+http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.SpellCheckerSessionListener.html
+http://developer.android.com/reference/android/view/textservice/SpellCheckerInfo.html
+http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.html
+http://developer.android.com/reference/android/view/textservice/SpellCheckerSubtype.html
+http://developer.android.com/reference/android/view/textservice/SuggestionsInfo.html
+http://developer.android.com/reference/android/view/textservice/TextInfo.html
+http://developer.android.com/reference/android/view/textservice/TextServicesManager.html
http://developer.android.com/reference/android/os/Parcelable.html
-http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/LineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
-http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
-http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
-http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
-http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
-http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/HeaderIterator.html
-http://developer.android.com/reference/java/util/List.html
-http://developer.android.com/reference/org/apache/http/HttpRequest.html
-http://developer.android.com/reference/org/apache/http/TokenIterator.html
-http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
-http://developer.android.com/reference/android/media/AudioManager.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.html
+http://developer.android.com/reference/android/os/Parcelable.Creator.html
+http://developer.android.com/reference/android/os/Parcel.html
+http://developer.android.com/reference/java/lang/Class.html
+http://developer.android.com/shareables/training/OpenGLES.zip
+http://developer.android.com/reference/android/opengl/GLSurfaceView.html
+http://developer.android.com/reference/android/view/MotionEvent.html
+http://developer.android.com/reference/android/location/LocationManager.html
+http://developer.android.com/reference/android/location/LocationProvider.html
+http://developer.android.com/reference/com/google/android/gms/maps/MapView.html
+http://developer.android.com/reference/android/app/ActionBar.OnMenuVisibilityListener.html
+http://developer.android.com/reference/android/app/ActionBar.OnNavigationListener.html
+http://developer.android.com/reference/android/app/ActionBar.TabListener.html
+http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
+http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
+http://developer.android.com/reference/android/app/FragmentBreadCrumbs.OnBreadCrumbClickListener.html
+http://developer.android.com/reference/android/app/FragmentManager.BackStackEntry.html
+http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
+http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html
+http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
+http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
+http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
+http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
+http://developer.android.com/reference/android/app/ActionBar.LayoutParams.html
+http://developer.android.com/reference/android/app/ActivityGroup.html
+http://developer.android.com/reference/android/app/ActivityManager.html
+http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
+http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
+http://developer.android.com/reference/android/app/ActivityOptions.html
+http://developer.android.com/reference/android/app/AlarmManager.html
+http://developer.android.com/reference/android/app/AliasActivity.html
+http://developer.android.com/reference/android/app/Application.html
+http://developer.android.com/reference/android/app/ApplicationErrorReport.html
+http://developer.android.com/reference/android/app/ApplicationErrorReport.AnrInfo.html
+http://developer.android.com/reference/android/app/ApplicationErrorReport.BatteryInfo.html
+http://developer.android.com/reference/android/app/ApplicationErrorReport.CrashInfo.html
+http://developer.android.com/reference/android/app/ApplicationErrorReport.RunningServiceInfo.html
+http://developer.android.com/reference/android/app/DownloadManager.html
+http://developer.android.com/reference/android/app/DownloadManager.Query.html
+http://developer.android.com/reference/android/app/DownloadManager.Request.html
+http://developer.android.com/reference/android/app/ExpandableListActivity.html
+http://developer.android.com/reference/android/app/Fragment.SavedState.html
+http://developer.android.com/reference/android/app/FragmentBreadCrumbs.html
+http://developer.android.com/reference/android/app/Instrumentation.html
+http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
+http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
+http://developer.android.com/reference/android/app/IntentService.html
+http://developer.android.com/reference/android/app/KeyguardManager.html
+http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
+http://developer.android.com/reference/android/app/LauncherActivity.html
+http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
+http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
+http://developer.android.com/reference/android/app/ListActivity.html
+http://developer.android.com/reference/android/app/ListFragment.html
+http://developer.android.com/reference/android/app/LoaderManager.html
+http://developer.android.com/reference/android/app/LocalActivityManager.html
+http://developer.android.com/reference/android/app/MediaRouteActionProvider.html
+http://developer.android.com/reference/android/app/MediaRouteButton.html
+http://developer.android.com/reference/android/app/NativeActivity.html
+http://developer.android.com/reference/android/app/Notification.BigPictureStyle.html
+http://developer.android.com/reference/android/app/Notification.BigTextStyle.html
+http://developer.android.com/reference/android/app/Notification.Builder.html
+http://developer.android.com/reference/android/app/Notification.InboxStyle.html
+http://developer.android.com/reference/android/app/Notification.Style.html
+http://developer.android.com/reference/android/app/Presentation.html
+http://developer.android.com/reference/android/app/SearchableInfo.html
+http://developer.android.com/reference/android/app/SearchManager.html
+http://developer.android.com/reference/android/app/TabActivity.html
+http://developer.android.com/reference/android/app/TaskStackBuilder.html
+http://developer.android.com/reference/android/app/UiModeManager.html
+http://developer.android.com/reference/android/app/WallpaperInfo.html
+http://developer.android.com/reference/android/app/WallpaperManager.html
+http://developer.android.com/reference/android/app/Fragment.InstantiationException.html
+http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
+http://developer.android.com/reference/android/content/DialogInterface.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.html
+http://developer.android.com/reference/java/lang/CharSequence.html
+http://developer.android.com/reference/java/text/NumberFormat.html
+http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
+http://developer.android.com/reference/android/widget/Button.html
http://developer.android.com/reference/android/view/KeyEvent.html
+http://developer.android.com/reference/android/os/Message.html
+http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
+http://developer.android.com/reference/android/view/Window.html
+http://developer.android.com/reference/android/view/ActionMode.html
+http://developer.android.com/reference/android/view/MenuItem.html
+http://developer.android.com/reference/android/view/ContextMenu.html
+http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
+http://developer.android.com/reference/android/view/KeyEvent.Callback.html
+http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
+http://developer.android.com/reference/android/view/ActionMode.Callback.html
+http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
+http://developer.android.com/reference/android/content/DialogInterface.OnShowListener.html
+http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
+http://developer.android.com/reference/android/view/Window.Callback.html
+http://developer.android.com/reference/android/widget/RemoteViews.html
+http://developer.android.com/reference/android/graphics/Bitmap.html
+http://developer.android.com/reference/android/media/AudioManager.html
+http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
+http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
+http://developer.android.com/reference/android/os/Vibrator.html
+http://developer.android.com/reference/java/lang/System.html
+http://developer.android.com/shareables/training/MobileAds.zip
+http://developer.android.com/reference/android/media/JetPlayer.html
+http://developer.android.com/resources/samples/JetBoy/index.html
+http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
+http://developer.android.com/reference/android/test/ServiceTestCase.html
+http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
+http://developer.android.com/reference/android/os/IBinder.html
+http://developer.android.com/reference/android/test/AndroidTestCase.html
+http://developer.android.com/reference/android/view/ViewGroup.html
+http://developer.android.com/reference/android/widget/CheckBox.html
+http://developer.android.com/reference/android/widget/RadioButton.html
+http://developer.android.com/reference/android/widget/Gallery.html
+http://developer.android.com/reference/android/widget/Spinner.html
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
+http://developer.android.com/reference/android/widget/ImageSwitcher.html
+http://developer.android.com/reference/android/widget/TextSwitcher.html
+http://developer.android.com/guide/topics/ui/layout-objects.html
+http://developer.android.com/reference/android/graphics/Canvas.html
+http://developer.android.com/reference/android/view/SurfaceView.html
+http://developer.android.com/resources/samples/ApiDemos/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
+http://developer.android.com/sdk/api_diff/10/changes.html
+http://developer.android.com/reference/android/hardware/usb/UsbDevice.html
+http://developer.android.com/reference/android/animation/LayoutTransition.TransitionListener.html
+http://developer.android.com/reference/android/animation/TimeAnimator.TimeListener.html
+http://developer.android.com/reference/android/animation/AnimatorInflater.html
+http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html
+http://developer.android.com/reference/android/animation/TimeAnimator.html
+http://developer.android.com/shareables/training/CustomView.zip
+http://developer.android.com/sdk/eclipse-adt.html
+http://developer.android.com/reference/android/content/res/TypedArray.html
+http://developer.android.com/reference/android/support/v4/app/FragmentManager.BackStackEntry.html
+http://developer.android.com/reference/android/support/v4/app/FragmentManager.OnBackStackChangedListener.html
+http://developer.android.com/reference/android/support/v4/app/LoaderManager.LoaderCallbacks.html
+http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html
+http://developer.android.com/reference/android/support/v4/app/Fragment.SavedState.html
+http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
+http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
+http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
+http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html
+http://developer.android.com/reference/android/support/v4/app/ListFragment.html
+http://developer.android.com/reference/android/support/v4/app/LoaderManager.html
+http://developer.android.com/reference/android/support/v4/app/NavUtils.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigTextStyle.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html
+http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Style.html
+http://developer.android.com/reference/android/support/v4/app/ServiceCompat.html
+http://developer.android.com/reference/android/support/v4/app/ShareCompat.html
+http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentBuilder.html
+http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentReader.html
+http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html
+http://developer.android.com/reference/android/support/v4/app/TaskStackBuilderHoneycomb.html
+http://developer.android.com/reference/android/support/v4/app/Fragment.InstantiationException.html
+http://developer.android.com/reference/android/content/ComponentCallbacks.html
+http://developer.android.com/reference/java/io/FileDescriptor.html
+http://developer.android.com/reference/java/io/PrintWriter.html
+http://developer.android.com/reference/java/util/Formatter.html
+http://developer.android.com/reference/android/content/res/Configuration.html
+http://developer.android.com/reference/android/view/animation/Animation.html
+http://developer.android.com/reference/android/view/MenuInflater.html
+http://developer.android.com/reference/android/util/AttributeSet.html
+http://developer.android.com/reference/java/lang/InstantiationException.html
+http://developer.android.com/reference/android/widget/AdapterView.html
+http://developer.android.com/reference/android/app/backup/BackupManager.html
+http://developer.android.com/reference/android/app/backup/BackupAgent.html
+http://developer.android.com/reference/android/app/backup/BackupAgentHelper.html
+http://developer.android.com/reference/android/content/SharedPreferences.html
+http://developer.android.com/reference/android/app/backup/BackupDataOutput.html
+http://developer.android.com/reference/android/app/backup/BackupDataInput.html
+http://developer.android.com/resources/samples/BackupRestore/src/com/example/android/backuprestore/ExampleAgent.html
+http://developer.android.com/resources/samples/BackupRestore/index.html
+http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
+http://developer.android.com/reference/android/app/backup/FileBackupHelper.html
+http://developer.android.com/reference/android/content/ContextWrapper.html
+http://developer.android.com/reference/android/content/pm/PackageInfo.html
+http://developer.android.com/reference/android/os/UserHandle.html
+http://developer.android.com/reference/android/content/IntentSender.html
+http://developer.android.com/reference/android/os/Handler.html
+http://developer.android.com/reference/android/os/Process.html
+http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
+http://developer.android.com/reference/android/test/TestSuiteProvider.html
+http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
+http://developer.android.com/reference/android/test/ActivityTestCase.html
+http://developer.android.com/reference/android/test/AndroidTestRunner.html
+http://developer.android.com/reference/android/test/ApplicationTestCase.html
+http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
+http://developer.android.com/reference/android/test/IsolatedContext.html
+http://developer.android.com/reference/android/test/LoaderTestCase.html
+http://developer.android.com/reference/android/test/MoreAsserts.html
+http://developer.android.com/reference/android/test/ProviderTestCase.html
+http://developer.android.com/reference/android/test/ProviderTestCase2.html
+http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
+http://developer.android.com/reference/android/test/TouchUtils.html
+http://developer.android.com/reference/android/test/AssertionFailedError.html
+http://developer.android.com/reference/android/test/ComparisonFailure.html
+http://developer.android.com/reference/android/view/ActionProvider.html
+http://developer.android.com/reference/android/widget/ShareActionProvider.html
+http://developer.android.com/shareables/training/PhotoIntentActivity.zip
+http://developer.android.com/reference/android/hardware/Sensor.html
+http://developer.android.com/reference/android/hardware/SensorEvent.html
+http://developer.android.com/reference/android/hardware/SensorManager.html
+http://developer.android.com/reference/android/hardware/SensorEventListener.html
+http://developer.android.com/resources/samples/AccelerometerPlay/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
+http://developer.android.com/reference/android/os/CancellationSignal.OnCancelListener.html
+http://developer.android.com/reference/android/os/Handler.Callback.html
+http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
+http://developer.android.com/reference/android/os/IInterface.html
+http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
+http://developer.android.com/reference/android/os/Parcelable.ClassLoaderCreator.html
+http://developer.android.com/reference/android/os/RecoverySystem.ProgressListener.html
+http://developer.android.com/reference/android/os/AsyncTask.html
+http://developer.android.com/reference/android/os/BatteryManager.html
+http://developer.android.com/reference/android/os/Binder.html
+http://developer.android.com/reference/android/os/Build.VERSION.html
+http://developer.android.com/reference/android/os/CancellationSignal.html
+http://developer.android.com/reference/android/os/ConditionVariable.html
+http://developer.android.com/reference/android/os/CountDownTimer.html
+http://developer.android.com/reference/android/os/Debug.html
+http://developer.android.com/reference/android/os/Debug.InstructionCount.html
+http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
+http://developer.android.com/reference/android/os/DropBoxManager.html
+http://developer.android.com/reference/android/os/DropBoxManager.Entry.html
+http://developer.android.com/reference/android/os/Environment.html
+http://developer.android.com/reference/android/os/FileObserver.html
+http://developer.android.com/reference/android/os/HandlerThread.html
+http://developer.android.com/reference/android/os/Looper.html
+http://developer.android.com/reference/android/os/MemoryFile.html
+http://developer.android.com/reference/android/os/MessageQueue.html
+http://developer.android.com/reference/android/os/Messenger.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
+http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
+http://developer.android.com/reference/android/os/ParcelUuid.html
+http://developer.android.com/reference/android/os/PowerManager.html
+http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
+http://developer.android.com/reference/android/os/RecoverySystem.html
+http://developer.android.com/reference/android/os/RemoteCallbackList.html
+http://developer.android.com/reference/android/os/ResultReceiver.html
+http://developer.android.com/reference/android/os/StatFs.html
+http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.html
+http://developer.android.com/reference/android/os/StrictMode.VmPolicy.html
+http://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html
+http://developer.android.com/reference/android/os/SystemClock.html
+http://developer.android.com/reference/android/os/TokenWatcher.html
+http://developer.android.com/reference/android/os/UserManager.html
+http://developer.android.com/reference/android/os/WorkSource.html
+http://developer.android.com/reference/android/os/AsyncTask.Status.html
+http://developer.android.com/reference/android/os/BadParcelableException.html
+http://developer.android.com/reference/android/os/DeadObjectException.html
+http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
+http://developer.android.com/reference/android/os/OperationCanceledException.html
+http://developer.android.com/reference/android/os/ParcelFormatException.html
+http://developer.android.com/reference/android/os/RemoteException.html
+http://developer.android.com/reference/android/os/TransactionTooLargeException.html
+http://developer.android.com/reference/java/io/Closeable.html
+http://developer.android.com/reference/java/net/DatagramSocket.html
+http://developer.android.com/reference/java/net/Socket.html
+http://developer.android.com/reference/java/io/File.html
+http://developer.android.com/reference/java/io/IOException.html
+http://developer.android.com/reference/java/io/FileNotFoundException.html
+http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
+http://developer.android.com/reference/java/lang/Throwable.html
+http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.html
+http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.Field.html
+http://developer.android.com/reference/javax/xml/datatype/DatatypeFactory.html
+http://developer.android.com/reference/javax/xml/datatype/Duration.html
+http://developer.android.com/reference/javax/xml/datatype/XMLGregorianCalendar.html
+http://developer.android.com/reference/javax/xml/datatype/DatatypeConfigurationException.html
+http://developer.android.com/reference/android/view/ActionProvider.VisibilityListener.html
+http://developer.android.com/reference/android/view/Choreographer.FrameCallback.html
+http://developer.android.com/reference/android/view/CollapsibleActionView.html
+http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
+http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
+http://developer.android.com/reference/android/view/InputQueue.Callback.html
+http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
+http://developer.android.com/reference/android/view/LayoutInflater.Factory2.html
+http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
+http://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html
+http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
+http://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener.html
+http://developer.android.com/reference/android/view/SubMenu.html
+http://developer.android.com/reference/android/view/SurfaceHolder.html
+http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
+http://developer.android.com/reference/android/view/SurfaceHolder.Callback2.html
+http://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener.html
+http://developer.android.com/reference/android/view/View.OnAttachStateChangeListener.html
+http://developer.android.com/reference/android/view/View.OnClickListener.html
+http://developer.android.com/reference/android/view/View.OnDragListener.html
+http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
+http://developer.android.com/reference/android/view/View.OnGenericMotionListener.html
+http://developer.android.com/reference/android/view/View.OnHoverListener.html
+http://developer.android.com/reference/android/view/View.OnKeyListener.html
+http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html
+http://developer.android.com/reference/android/view/View.OnLongClickListener.html
+http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html
+http://developer.android.com/reference/android/view/View.OnTouchListener.html
+http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
+http://developer.android.com/reference/android/view/ViewManager.html
+http://developer.android.com/reference/android/view/ViewParent.html
+http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnDrawListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnScrollChangedListener.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
+http://developer.android.com/reference/android/view/WindowManager.html
+http://developer.android.com/reference/android/view/AbsSavedState.html
+http://developer.android.com/reference/android/view/Choreographer.html
+http://developer.android.com/reference/android/view/ContextThemeWrapper.html
+http://developer.android.com/reference/android/view/Display.html
+http://developer.android.com/reference/android/view/DragEvent.html
+http://developer.android.com/reference/android/view/FocusFinder.html
+http://developer.android.com/reference/android/view/GestureDetector.html
+http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
+http://developer.android.com/reference/android/view/Gravity.html
+http://developer.android.com/reference/android/view/HapticFeedbackConstants.html
+http://developer.android.com/reference/android/view/InputDevice.html
+http://developer.android.com/reference/android/view/InputDevice.MotionRange.html
+http://developer.android.com/reference/android/view/InputEvent.html
+http://developer.android.com/reference/android/view/InputQueue.html
+http://developer.android.com/reference/android/view/KeyCharacterMap.html
+http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
+http://developer.android.com/reference/android/view/KeyEvent.DispatcherState.html
+http://developer.android.com/reference/android/view/MotionEvent.PointerCoords.html
+http://developer.android.com/reference/android/view/MotionEvent.PointerProperties.html
+http://developer.android.com/reference/android/view/OrientationEventListener.html
+http://developer.android.com/reference/android/view/OrientationListener.html
+http://developer.android.com/reference/android/view/ScaleGestureDetector.html
+http://developer.android.com/reference/android/view/ScaleGestureDetector.SimpleOnScaleGestureListener.html
+http://developer.android.com/reference/android/view/SoundEffectConstants.html
+http://developer.android.com/reference/android/view/Surface.html
+http://developer.android.com/reference/android/view/TextureView.html
+http://developer.android.com/reference/android/view/VelocityTracker.html
+http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html
+http://developer.android.com/reference/android/view/View.BaseSavedState.html
+http://developer.android.com/reference/android/view/View.DragShadowBuilder.html
+http://developer.android.com/reference/android/view/View.MeasureSpec.html
+http://developer.android.com/reference/android/view/ViewConfiguration.html
+http://developer.android.com/reference/android/view/ViewDebug.html
+http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
+http://developer.android.com/reference/android/view/ViewStub.html
+http://developer.android.com/reference/android/view/ViewTreeObserver.html
+http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
+http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
+http://developer.android.com/reference/android/view/InflateException.html
+http://developer.android.com/reference/android/view/KeyCharacterMap.UnavailableException.html
+http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
+http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
+http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
+http://developer.android.com/reference/android/view/WindowManager.InvalidDisplayException.html
+http://developer.android.com/reference/java/lang/Runnable.html
+http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
+http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
+http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
+http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
+http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
+http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
+http://developer.android.com/reference/java/util/prefs/Preferences.html
+http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
+http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
+http://developer.android.com/reference/android/util/Printer.html
+http://developer.android.com/reference/android/util/AtomicFile.html
+http://developer.android.com/reference/android/util/Base64.html
+http://developer.android.com/reference/android/util/Base64InputStream.html
+http://developer.android.com/reference/android/util/Base64OutputStream.html
+http://developer.android.com/reference/android/util/Config.html
+http://developer.android.com/reference/android/util/DebugUtils.html
+http://developer.android.com/reference/android/util/DisplayMetrics.html
+http://developer.android.com/reference/android/util/EventLog.html
+http://developer.android.com/reference/android/util/EventLog.Event.html
+http://developer.android.com/reference/android/util/EventLogTags.html
+http://developer.android.com/reference/android/util/EventLogTags.Description.html
+http://developer.android.com/reference/android/util/FloatMath.html
+http://developer.android.com/reference/android/util/JsonReader.html
+http://developer.android.com/reference/android/util/JsonWriter.html
+http://developer.android.com/reference/android/util/Log.html
+http://developer.android.com/reference/android/util/LogPrinter.html
+http://developer.android.com/reference/android/util/LongSparseArray.html
+http://developer.android.com/reference/android/util/LruCache.html
+http://developer.android.com/reference/android/util/MonthDisplayHelper.html
+http://developer.android.com/reference/android/util/Pair.html
+http://developer.android.com/reference/android/util/Patterns.html
+http://developer.android.com/reference/android/util/PrintStreamPrinter.html
+http://developer.android.com/reference/android/util/PrintWriterPrinter.html
+http://developer.android.com/reference/android/util/Property.html
+http://developer.android.com/reference/android/util/SparseArray.html
+http://developer.android.com/reference/android/util/SparseBooleanArray.html
+http://developer.android.com/reference/android/util/SparseIntArray.html
+http://developer.android.com/reference/android/util/StateSet.html
+http://developer.android.com/reference/android/util/StringBuilderPrinter.html
+http://developer.android.com/reference/android/util/TimeUtils.html
+http://developer.android.com/reference/android/util/TimingLogger.html
+http://developer.android.com/reference/android/util/TypedValue.html
+http://developer.android.com/reference/android/util/Xml.html
+http://developer.android.com/reference/android/util/JsonToken.html
+http://developer.android.com/reference/android/util/Xml.Encoding.html
+http://developer.android.com/reference/android/util/AndroidException.html
+http://developer.android.com/reference/android/util/AndroidRuntimeException.html
+http://developer.android.com/reference/android/util/Base64DataException.html
+http://developer.android.com/reference/android/util/MalformedJsonException.html
+http://developer.android.com/reference/android/util/NoSuchPropertyException.html
+http://developer.android.com/reference/android/util/TimeFormatException.html
+http://developer.android.com/reference/java/lang/Math.html
+http://developer.android.com/reference/java/io/PrintStream.html
+http://developer.android.com/reference/java/lang/StringBuilder.html
+http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
+http://developer.android.com/resources/tutorials/views/hello-formstuff.html
+http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
+http://developer.android.com/reference/android/widget/ImageButton.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html
+http://developer.android.com/reference/android/widget/DatePicker.html
+http://developer.android.com/reference/android/provider/MediaStore.html
+http://developer.android.com/reference/android/media/MediaScannerConnection.html
+http://developer.android.com/reference/android/media/MediaScannerConnection.OnScanCompletedListener.html
+http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
+http://developer.android.com/reference/android/content/ContentProvider.html
+http://developer.android.com/guide/topics/security/security.html
+http://developer.android.com/reference/java/util/concurrent/BlockingDeque.html
+http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/Callable.html
+http://developer.android.com/reference/java/util/concurrent/CompletionService.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentNavigableMap.html
+http://developer.android.com/reference/java/util/concurrent/Delayed.html
+http://developer.android.com/reference/java/util/concurrent/Executor.html
+http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/Future.html
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
+http://developer.android.com/reference/java/util/concurrent/RunnableFuture.html
+http://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
+http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
+http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
+http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListMap.html
+http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListSet.html
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
+http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
+http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
+http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
+http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
+http://developer.android.com/reference/java/util/concurrent/Exchanger.html
+http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
+http://developer.android.com/reference/java/util/concurrent/Executors.html
+http://developer.android.com/reference/java/util/concurrent/FutureTask.html
+http://developer.android.com/reference/java/util/concurrent/LinkedBlockingDeque.html
+http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
+http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
+http://developer.android.com/reference/java/util/concurrent/Semaphore.html
+http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
+http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
+http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
+http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
+http://developer.android.com/reference/java/util/concurrent/CancellationException.html
+http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
+http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
+http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
+http://developer.android.com/reference/java/util/Deque.html
+http://developer.android.com/reference/java/util/Queue.html
+http://developer.android.com/reference/java/util/Map.html
+http://developer.android.com/reference/java/util/NavigableMap.html
+http://developer.android.com/reference/java/util/NavigableSet.html
+http://developer.android.com/reference/java/util/Set.html
+http://developer.android.com/reference/java/util/PriorityQueue.html
http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html
http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
http://developer.android.com/reference/android/appwidget/AppWidgetManager.html
-http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
-http://developer.android.com/reference/android/app/AlarmManager.html
-http://developer.android.com/reference/android/widget/RemoteViews.html
-http://developer.android.com/reference/android/widget/FrameLayout.html
-http://developer.android.com/reference/android/widget/LinearLayout.html
-http://developer.android.com/reference/android/widget/RelativeLayout.html
http://developer.android.com/reference/android/widget/AnalogClock.html
-http://developer.android.com/reference/android/widget/Button.html
http://developer.android.com/reference/android/widget/Chronometer.html
-http://developer.android.com/reference/android/widget/ImageButton.html
-http://developer.android.com/reference/android/widget/ImageView.html
-http://developer.android.com/reference/android/widget/ProgressBar.html
-http://developer.android.com/reference/android/widget/TextView.html
http://developer.android.com/reference/android/widget/ViewFlipper.html
-http://developer.android.com/reference/android/widget/ListView.html
-http://developer.android.com/reference/android/widget/GridView.html
http://developer.android.com/reference/android/widget/StackView.html
http://developer.android.com/reference/android/widget/AdapterViewFlipper.html
-http://developer.android.com/reference/android/app/Service.html
-http://developer.android.com/reference/android/app/PendingIntent.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html
http://developer.android.com/reference/android/widget/RemoteViewsService.html
@@ -764,188 +1364,131 @@
http://developer.android.com/reference/android/widget/Adapter.html
http://developer.android.com/reference/android/widget/RemoteViewsService.RemoteViewsFactory.html
http://developer.android.com/resources/samples/StackWidget/index.html
-http://developer.android.com/resources/samples/images/StackWidget.png
http://developer.android.com/reference/android/widget/Toast.html
-http://developer.android.com/reference/android/Manifest.permission.html
http://developer.android.com/resources/samples/WeatherListWidget/index.html
-http://developer.android.com/reference/android/content/ContentProvider.html
-http://developer.android.com/reference/android/net/Uri.html
-http://developer.android.com/reference/android/content/pm/PackageManager.html
-http://developer.android.com/shareables/training/OpenGLES.zip
-http://developer.android.com/reference/android/graphics/Canvas.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
-http://developer.android.com/reference/android/graphics/Path.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
-http://developer.android.com/reference/android/widget/ToggleButton.html
-http://developer.android.com/reference/android/widget/Switch.html
-http://developer.android.com/reference/android/widget/CompoundButton.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
+http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
+http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
+http://developer.android.com/resources/samples/HoneycombGallery/index.html
+http://developer.android.com/resources/samples/ActionBarCompat/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html
http://developer.android.com/reference/android/R.attr.html
-http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
-http://developer.android.com/reference/javax/xml/xpath/XPath.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpression.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunction.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathVariableResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathConstants.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactory.html
-http://developer.android.com/reference/javax/xml/xpath/XPathException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpressionException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactoryConfigurationException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionException.html
-http://developer.android.com/reference/javax/xml/namespace/QName.html
-http://developer.android.com/reference/android/support/v4/content/CursorLoader.html
-http://developer.android.com/reference/android/database/Cursor.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/support/v4/content/Loader.html
-http://developer.android.com/reference/android/app/ListActivity.html
-http://developer.android.com/reference/android/content/res/Resources.html
-http://developer.android.com/reference/java/security/Certificate.html
-http://developer.android.com/reference/java/security/DomainCombiner.html
-http://developer.android.com/reference/java/security/Guard.html
-http://developer.android.com/reference/java/security/Key.html
-http://developer.android.com/reference/java/security/KeyStore.Entry.html
-http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
-http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
-http://developer.android.com/reference/java/security/Policy.Parameters.html
-http://developer.android.com/reference/java/security/Principal.html
-http://developer.android.com/reference/java/security/PrivateKey.html
-http://developer.android.com/reference/java/security/PrivilegedAction.html
-http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
-http://developer.android.com/reference/java/security/PublicKey.html
-http://developer.android.com/reference/java/security/AccessControlContext.html
-http://developer.android.com/reference/java/security/AccessController.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
-http://developer.android.com/reference/java/security/AlgorithmParameters.html
-http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
-http://developer.android.com/reference/java/security/AllPermission.html
-http://developer.android.com/reference/java/security/AuthProvider.html
-http://developer.android.com/reference/java/security/BasicPermission.html
-http://developer.android.com/reference/java/security/CodeSigner.html
-http://developer.android.com/reference/java/security/CodeSource.html
-http://developer.android.com/reference/java/security/DigestInputStream.html
-http://developer.android.com/reference/java/security/DigestOutputStream.html
-http://developer.android.com/reference/java/security/GuardedObject.html
-http://developer.android.com/reference/java/security/Identity.html
-http://developer.android.com/reference/java/security/IdentityScope.html
-http://developer.android.com/reference/java/security/KeyFactory.html
-http://developer.android.com/reference/java/security/KeyFactorySpi.html
-http://developer.android.com/reference/java/security/KeyPair.html
-http://developer.android.com/reference/java/security/KeyPairGenerator.html
-http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
-http://developer.android.com/reference/java/security/KeyRep.html
-http://developer.android.com/reference/java/security/KeyStore.html
-http://developer.android.com/reference/java/security/KeyStore.Builder.html
-http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
-http://developer.android.com/reference/java/security/KeyStoreSpi.html
-http://developer.android.com/reference/java/security/MessageDigest.html
-http://developer.android.com/reference/java/security/MessageDigestSpi.html
-http://developer.android.com/reference/java/security/Permission.html
-http://developer.android.com/reference/java/security/PermissionCollection.html
-http://developer.android.com/reference/java/security/Permissions.html
-http://developer.android.com/reference/java/security/Policy.html
-http://developer.android.com/reference/java/security/PolicySpi.html
-http://developer.android.com/reference/java/security/ProtectionDomain.html
-http://developer.android.com/reference/java/security/Provider.html
-http://developer.android.com/reference/java/security/Provider.Service.html
-http://developer.android.com/reference/java/security/SecureClassLoader.html
-http://developer.android.com/reference/java/security/SecureRandom.html
-http://developer.android.com/reference/java/security/SecureRandomSpi.html
-http://developer.android.com/reference/java/security/Security.html
-http://developer.android.com/reference/java/security/SecurityPermission.html
-http://developer.android.com/reference/java/security/Signature.html
-http://developer.android.com/reference/java/security/SignatureSpi.html
-http://developer.android.com/reference/java/security/SignedObject.html
-http://developer.android.com/reference/java/security/Signer.html
-http://developer.android.com/reference/java/security/Timestamp.html
-http://developer.android.com/reference/java/security/UnresolvedPermission.html
-http://developer.android.com/reference/java/security/KeyRep.Type.html
-http://developer.android.com/reference/java/security/AccessControlException.html
-http://developer.android.com/reference/java/security/DigestException.html
-http://developer.android.com/reference/java/security/GeneralSecurityException.html
-http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
-http://developer.android.com/reference/java/security/InvalidKeyException.html
-http://developer.android.com/reference/java/security/InvalidParameterException.html
-http://developer.android.com/reference/java/security/KeyException.html
-http://developer.android.com/reference/java/security/KeyManagementException.html
-http://developer.android.com/reference/java/security/KeyStoreException.html
-http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
-http://developer.android.com/reference/java/security/NoSuchProviderException.html
-http://developer.android.com/reference/java/security/PrivilegedActionException.html
-http://developer.android.com/reference/java/security/ProviderException.html
-http://developer.android.com/reference/java/security/SignatureException.html
-http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
-http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
-http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
-http://developer.android.com/reference/android/app/FragmentTransaction.html
-http://developer.android.com/reference/android/app/FragmentManager.html
-http://developer.android.com/reference/android/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/webkit/WebView.html
-http://developer.android.com/reference/android/view/MotionEvent.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
-http://developer.android.com/reference/android/util/Log.html
-http://developer.android.com/reference/android/os/Debug.html
-http://developer.android.com/guide/practices/optimizing-for-3.0.html
-http://developer.android.com/reference/android/nfc/NdefMessage.html
-http://developer.android.com/reference/android/nfc/Tag.html
-http://developer.android.com/reference/android/nfc/tech/TagTechnology.html
-http://developer.android.com/reference/android/nfc/tech/NfcA.html
-http://developer.android.com/reference/android/nfc/tech/NfcB.html
-http://developer.android.com/reference/android/nfc/tech/NfcF.html
-http://developer.android.com/reference/android/nfc/tech/NfcV.html
-http://developer.android.com/reference/android/nfc/tech/IsoDep.html
-http://developer.android.com/reference/android/nfc/tech/Ndef.html
-http://developer.android.com/reference/android/nfc/tech/NdefFormatable.html
-http://developer.android.com/reference/android/nfc/tech/MifareClassic.html
-http://developer.android.com/reference/android/nfc/tech/MifareUltralight.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html
+http://developer.android.com/reference/android/R.styleable.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_action_bar.html
+http://developer.android.com/reference/android/widget/SearchView.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html
+http://developer.android.com/reference/android/widget/SpinnerAdapter.html
+http://developer.android.com/reference/android/widget/ArrayAdapter.html
+http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
+http://developer.android.com/resources/samples/HoneycombGallery/src/com/example/android/hcgallery/TitlesFragment.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.html
http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityRecordCompat.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.html
http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html
http://developer.android.com/reference/android/view/accessibility/AccessibilityRecord.html
+http://developer.android.com/resources/tutorials/views/index.html
+http://developer.android.com/reference/android/database/Cursor.html
+http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
http://developer.android.com/reference/android/app/backup/BackupHelper.html
-http://developer.android.com/reference/android/app/backup/BackupAgent.html
-http://developer.android.com/reference/android/app/backup/BackupAgentHelper.html
-http://developer.android.com/reference/android/app/backup/BackupDataInput.html
http://developer.android.com/reference/android/app/backup/BackupDataInputStream.html
-http://developer.android.com/reference/android/app/backup/BackupDataOutput.html
-http://developer.android.com/reference/android/app/backup/BackupManager.html
-http://developer.android.com/reference/android/app/backup/FileBackupHelper.html
http://developer.android.com/reference/android/app/backup/FullBackupDataOutput.html
http://developer.android.com/reference/android/app/backup/RestoreObserver.html
-http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
+http://developer.android.com/reference/android/text/ClipboardManager.html
+http://developer.android.com/reference/android/net/ConnectivityManager.html
+http://developer.android.com/reference/android/hardware/display/DisplayManager.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
+http://developer.android.com/reference/android/hardware/input/InputManager.html
+http://developer.android.com/reference/android/media/MediaRouter.html
+http://developer.android.com/reference/android/nfc/NfcManager.html
+http://developer.android.com/reference/android/net/nsd/NsdManager.html
+http://developer.android.com/reference/android/os/storage/StorageManager.html
+http://developer.android.com/reference/android/telephony/TelephonyManager.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
+http://developer.android.com/reference/android/net/wifi/WifiManager.html
+http://developer.android.com/reference/android/content/ServiceConnection.html
+http://developer.android.com/reference/android/content/res/AssetManager.html
+http://developer.android.com/reference/java/lang/ClassLoader.html
+http://developer.android.com/reference/android/content/ContentResolver.html
+http://developer.android.com/reference/android/content/res/Resources.Theme.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
+http://developer.android.com/reference/android/database/DatabaseErrorHandler.html
http://developer.android.com/reference/java/io/InputStream.html
+http://developer.android.com/shareables/training/FragmentBasics.zip
+http://developer.android.com/reference/android/content/Loader.html
+http://developer.android.com/reference/android/widget/CursorAdapter.html
+http://developer.android.com/reference/android/content/CursorLoader.html
+http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
+http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
+http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
+http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
+http://developer.android.com/reference/org/apache/http/client/CookieStore.html
+http://developer.android.com/reference/android/content/pm/FeatureInfo.html
+http://developer.android.com/reference/android/content/pm/ConfigurationInfo.html
+http://developer.android.com/reference/java/util/EventListener.html
+http://developer.android.com/reference/android/R.id.html
+http://developer.android.com/reference/android/R.layout.html
+http://developer.android.com/reference/java/lang/RuntimeException.html
+http://developer.android.com/reference/java/lang/Exception.html
+http://developer.android.com/guide/practices/design/responsiveness.html
+http://developer.android.com/reference/java/lang/StackTraceElement.html
+http://developer.android.com/reference/java/lang/Float.html
+http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
+http://developer.android.com/reference/android/graphics/Rect.html
+http://developer.android.com/reference/android/graphics/Point.html
+http://developer.android.com/reference/android/graphics/Matrix.html
+http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
+http://developer.android.com/reference/android/graphics/Paint.html
+http://developer.android.com/reference/android/content/ClipData.html
+http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityEventSource.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
+http://developer.android.com/reference/java/lang/Thread.html
+http://developer.android.com/reference/android/accounts/AccountAuthenticatorActivity.html
+http://developer.android.com/reference/android/preference/PreferenceActivity.html
+http://developer.android.com/reference/com/google/android/gms/maps/package-summary.html
+http://developer.android.com/reference/java/lang/Integer.html
+http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
+http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
+http://developer.android.com/reference/android/graphics/Region.html
+http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
+http://developer.android.com/reference/android/view/animation/Transformation.html
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
+http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
+http://developer.android.com/shareables/training/NetworkUsage.zip
+http://developer.android.com/reference/android/content/ComponentCallbacks2.html
+http://developer.android.com/reference/java/util/HashMap.html
+http://developer.android.com/reference/java/io/Serializable.html
+http://developer.android.com/reference/java/lang/IllegalArgumentException.html
+http://developer.android.com/reference/java/lang/IllegalStateException.html
+http://developer.android.com/reference/java/lang/NullPointerException.html
+http://developer.android.com/reference/java/util/EventObject.html
http://developer.android.com/reference/android/widget/AbsListView.MultiChoiceModeListener.html
http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
http://developer.android.com/reference/android/widget/AbsListView.SelectionBoundsAdjuster.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
http://developer.android.com/reference/android/widget/Advanceable.html
+http://developer.android.com/reference/android/widget/AutoCompleteTextView.OnDismissListener.html
http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
http://developer.android.com/reference/android/widget/CalendarView.OnDateChangeListener.html
http://developer.android.com/reference/android/widget/Checkable.html
http://developer.android.com/reference/android/widget/Chronometer.OnChronometerTickListener.html
+http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
@@ -956,7 +1499,6 @@
http://developer.android.com/reference/android/widget/Filterable.html
http://developer.android.com/reference/android/widget/FilterQueryProvider.html
http://developer.android.com/reference/android/widget/HeterogeneousExpandableList.html
-http://developer.android.com/reference/android/widget/ListAdapter.html
http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
http://developer.android.com/reference/android/widget/NumberPicker.Formatter.html
@@ -980,8 +1522,6 @@
http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerCloseListener.html
http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerOpenListener.html
http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerScrollListener.html
-http://developer.android.com/reference/android/widget/SpinnerAdapter.html
-http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
@@ -994,20 +1534,15 @@
http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
http://developer.android.com/reference/android/widget/AbsSeekBar.html
http://developer.android.com/reference/android/widget/AbsSpinner.html
-http://developer.android.com/reference/android/widget/AdapterView.html
http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
http://developer.android.com/reference/android/widget/AdapterViewAnimator.html
http://developer.android.com/reference/android/widget/AlphabetIndexer.html
-http://developer.android.com/reference/android/widget/ArrayAdapter.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
http://developer.android.com/reference/android/widget/BaseAdapter.html
http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
http://developer.android.com/reference/android/widget/CalendarView.html
-http://developer.android.com/reference/android/widget/CheckBox.html
http://developer.android.com/reference/android/widget/CheckedTextView.html
-http://developer.android.com/reference/android/widget/CursorAdapter.html
+http://developer.android.com/reference/android/widget/CompoundButton.html
http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/DatePicker.html
http://developer.android.com/reference/android/widget/DialerFilter.html
http://developer.android.com/reference/android/widget/DigitalClock.html
http://developer.android.com/reference/android/widget/EdgeEffect.html
@@ -1015,17 +1550,12 @@
http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
http://developer.android.com/reference/android/widget/Filter.html
http://developer.android.com/reference/android/widget/Filter.FilterResults.html
-http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/Gallery.html
http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
-http://developer.android.com/reference/android/widget/GridLayout.html
http://developer.android.com/reference/android/widget/GridLayout.Alignment.html
http://developer.android.com/reference/android/widget/GridLayout.LayoutParams.html
http://developer.android.com/reference/android/widget/GridLayout.Spec.html
http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
http://developer.android.com/reference/android/widget/HorizontalScrollView.html
-http://developer.android.com/reference/android/widget/ImageSwitcher.html
-http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
http://developer.android.com/reference/android/widget/ListPopupWindow.html
http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
http://developer.android.com/reference/android/widget/MediaController.html
@@ -1035,7 +1565,7 @@
http://developer.android.com/reference/android/widget/OverScroller.html
http://developer.android.com/reference/android/widget/PopupMenu.html
http://developer.android.com/reference/android/widget/PopupWindow.html
-http://developer.android.com/reference/android/widget/RadioButton.html
+http://developer.android.com/reference/android/widget/QuickContactBadge.html
http://developer.android.com/reference/android/widget/RadioGroup.html
http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
http://developer.android.com/reference/android/widget/RatingBar.html
@@ -1043,27 +1573,21 @@
http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
http://developer.android.com/reference/android/widget/Scroller.html
-http://developer.android.com/reference/android/widget/ScrollView.html
-http://developer.android.com/reference/android/widget/SearchView.html
http://developer.android.com/reference/android/widget/SeekBar.html
-http://developer.android.com/reference/android/widget/ShareActionProvider.html
http://developer.android.com/reference/android/widget/SimpleAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
http://developer.android.com/reference/android/widget/SlidingDrawer.html
http://developer.android.com/reference/android/widget/Space.html
-http://developer.android.com/reference/android/widget/Spinner.html
-http://developer.android.com/reference/android/widget/TabHost.html
-http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
+http://developer.android.com/reference/android/widget/Switch.html
http://developer.android.com/reference/android/widget/TableLayout.html
http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
http://developer.android.com/reference/android/widget/TableRow.html
http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
-http://developer.android.com/reference/android/widget/TabWidget.html
-http://developer.android.com/reference/android/widget/TextSwitcher.html
+http://developer.android.com/reference/android/widget/TextClock.html
http://developer.android.com/reference/android/widget/TextView.SavedState.html
http://developer.android.com/reference/android/widget/TimePicker.html
+http://developer.android.com/reference/android/widget/ToggleButton.html
http://developer.android.com/reference/android/widget/TwoLineListItem.html
http://developer.android.com/reference/android/widget/VideoView.html
http://developer.android.com/reference/android/widget/ViewSwitcher.html
@@ -1073,173 +1597,725 @@
http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
http://developer.android.com/reference/android/widget/TextView.BufferType.html
http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
-http://developer.android.com/reference/android/view/View.OnClickListener.html
-http://developer.android.com/reference/java/lang/Object.html
-http://developer.android.com/reference/java/lang/RuntimeException.html
-http://developer.android.com/reference/android/util/Property.html
-http://developer.android.com/reference/java/lang/Float.html
-http://developer.android.com/reference/android/util/AttributeSet.html
-http://developer.android.com/reference/android/graphics/ColorFilter.html
-http://developer.android.com/reference/android/graphics/Matrix.html
-http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
-http://developer.android.com/reference/android/graphics/Bitmap.html
-http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
-http://developer.android.com/reference/java/util/ArrayList.html
-http://developer.android.com/reference/android/view/View.OnAttachStateChangeListener.html
-http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html
-http://developer.android.com/reference/android/view/ViewPropertyAnimator.html
-http://developer.android.com/reference/java/lang/CharSequence.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
-http://developer.android.com/reference/android/view/ContextMenu.html
-http://developer.android.com/reference/android/content/res/Configuration.html
-http://developer.android.com/reference/android/view/DragEvent.html
-http://developer.android.com/reference/android/util/SparseArray.html
-http://developer.android.com/reference/android/graphics/Rect.html
-http://developer.android.com/reference/android/view/animation/Animation.html
-http://developer.android.com/reference/android/os/IBinder.html
-http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
-http://developer.android.com/reference/android/graphics/Point.html
-http://developer.android.com/reference/android/os/Handler.html
-http://developer.android.com/reference/android/view/KeyEvent.DispatcherState.html
-http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
-http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
-http://developer.android.com/reference/android/view/ViewParent.html
-http://developer.android.com/reference/android/view/TouchDelegate.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.html
-http://developer.android.com/reference/android/view/ViewGroup.html
-http://developer.android.com/reference/android/content/res/TypedArray.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
-http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
-http://developer.android.com/reference/android/view/KeyEvent.Callback.html
-http://developer.android.com/reference/java/lang/Runnable.html
-http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html
-http://developer.android.com/reference/android/graphics/Paint.html
-http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
-http://developer.android.com/reference/android/view/View.OnDragListener.html
-http://developer.android.com/reference/android/view/View.OnGenericMotionListener.html
-http://developer.android.com/reference/android/view/View.OnHoverListener.html
-http://developer.android.com/reference/android/view/View.OnKeyListener.html
-http://developer.android.com/reference/android/view/View.OnLongClickListener.html
-http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html
-http://developer.android.com/reference/android/view/View.OnTouchListener.html
-http://developer.android.com/reference/android/view/ActionMode.html
-http://developer.android.com/reference/android/view/ActionMode.Callback.html
-http://developer.android.com/reference/android/content/ClipData.html
-http://developer.android.com/reference/android/view/View.DragShadowBuilder.html
-http://developer.android.com/reference/java/lang/Class.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEventSource.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
-http://developer.android.com/reference/java/awt/font/NumericShaper.html
-http://developer.android.com/reference/java/awt/font/TextAttribute.html
-http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html
-http://developer.android.com/reference/android/animation/LayoutTransition.TransitionListener.html
-http://developer.android.com/reference/android/animation/TimeAnimator.TimeListener.html
-http://developer.android.com/reference/android/animation/TimeInterpolator.html
-http://developer.android.com/reference/android/animation/ValueAnimator.AnimatorUpdateListener.html
-http://developer.android.com/reference/android/animation/Animator.html
-http://developer.android.com/reference/android/animation/AnimatorInflater.html
-http://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html
-http://developer.android.com/reference/android/animation/AnimatorSet.html
-http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html
-http://developer.android.com/reference/android/animation/ArgbEvaluator.html
-http://developer.android.com/reference/android/animation/FloatEvaluator.html
-http://developer.android.com/reference/android/animation/IntEvaluator.html
-http://developer.android.com/reference/android/animation/Keyframe.html
-http://developer.android.com/reference/android/animation/LayoutTransition.html
-http://developer.android.com/reference/android/animation/ObjectAnimator.html
-http://developer.android.com/reference/android/animation/PropertyValuesHolder.html
-http://developer.android.com/reference/android/animation/TimeAnimator.html
-http://developer.android.com/reference/android/animation/ValueAnimator.html
-http://developer.android.com/reference/android/security/KeyChainAliasCallback.html
-http://developer.android.com/reference/android/security/KeyChain.html
-http://developer.android.com/reference/android/security/KeyChainException.html
-http://developer.android.com/reference/android/net/TrafficStats.html
-http://developer.android.com/reference/org/apache/http/client/HttpClient.html
-http://developer.android.com/reference/java/net/URLConnection.html
-http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/FormattedHeader.html
-http://developer.android.com/reference/org/apache/http/Header.html
-http://developer.android.com/reference/org/apache/http/HeaderElement.html
-http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
-http://developer.android.com/reference/org/apache/http/HttpEntity.html
-http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
-http://developer.android.com/reference/org/apache/http/HttpMessage.html
-http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpResponse.html
-http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/HttpStatus.html
-http://developer.android.com/reference/org/apache/http/NameValuePair.html
-http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
-http://developer.android.com/reference/org/apache/http/RequestLine.html
-http://developer.android.com/reference/org/apache/http/StatusLine.html
-http://developer.android.com/reference/org/apache/http/HttpHost.html
-http://developer.android.com/reference/org/apache/http/HttpVersion.html
-http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
-http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
-http://developer.android.com/reference/org/apache/http/HttpException.html
-http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
-http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
-http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
-http://developer.android.com/reference/org/apache/http/ParseException.html
-http://developer.android.com/reference/org/apache/http/ProtocolException.html
-http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
-http://developer.android.com/reference/java/util/Iterator.html
-http://developer.android.com/shareables/training/DeviceManagement.zip
-http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
-http://developer.android.com/reference/java/lang/SecurityException.html
-http://developer.android.com/reference/android/net/sip/SipRegistrationListener.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.Listener.html
-http://developer.android.com/reference/android/net/sip/SipErrorCode.html
-http://developer.android.com/reference/android/net/sip/SipManager.html
-http://developer.android.com/reference/android/net/sip/SipProfile.html
-http://developer.android.com/reference/android/net/sip/SipProfile.Builder.html
-http://developer.android.com/reference/android/net/sip/SipSession.html
-http://developer.android.com/reference/android/net/sip/SipSession.Listener.html
-http://developer.android.com/reference/android/net/sip/SipSession.State.html
-http://developer.android.com/reference/android/net/sip/SipException.html
-http://developer.android.com/resources/samples/SearchableDictionary/index.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
-http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
-http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.html
+http://developer.android.com/guide/topics/ui/binding.html
+http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
+http://developer.android.com/reference/android/content/ClipboardManager.OnPrimaryClipChangedListener.html
+http://developer.android.com/reference/android/content/ContentProvider.PipeDataWriter.html
+http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
+http://developer.android.com/reference/android/content/EntityIterator.html
+http://developer.android.com/reference/android/content/IntentSender.OnFinished.html
+http://developer.android.com/reference/android/content/Loader.OnLoadCanceledListener.html
+http://developer.android.com/reference/android/content/Loader.OnLoadCompleteListener.html
+http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
+http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
+http://developer.android.com/reference/android/content/SyncStatusObserver.html
+http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
+http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
+http://developer.android.com/reference/android/content/AsyncTaskLoader.html
+http://developer.android.com/reference/android/content/BroadcastReceiver.PendingResult.html
+http://developer.android.com/reference/android/content/ClipboardManager.html
+http://developer.android.com/reference/android/content/ClipData.Item.html
+http://developer.android.com/reference/android/content/ClipDescription.html
+http://developer.android.com/reference/android/content/ContentProviderClient.html
+http://developer.android.com/reference/android/content/ContentProviderOperation.html
+http://developer.android.com/reference/android/content/ContentProviderOperation.Builder.html
+http://developer.android.com/reference/android/content/ContentProviderResult.html
+http://developer.android.com/reference/android/content/ContentQueryMap.html
+http://developer.android.com/reference/android/content/ContentUris.html
+http://developer.android.com/reference/android/content/ContentValues.html
+http://developer.android.com/reference/android/content/Entity.html
+http://developer.android.com/reference/android/content/Entity.NamedContentValues.html
+http://developer.android.com/reference/android/content/Intent.FilterComparison.html
+http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
+http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
+http://developer.android.com/reference/android/content/Loader.ForceLoadContentObserver.html
+http://developer.android.com/reference/android/content/MutableContextWrapper.html
+http://developer.android.com/reference/android/content/PeriodicSync.html
+http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
+http://developer.android.com/reference/android/content/SyncAdapterType.html
+http://developer.android.com/reference/android/content/SyncContext.html
+http://developer.android.com/reference/android/content/SyncInfo.html
+http://developer.android.com/reference/android/content/SyncResult.html
+http://developer.android.com/reference/android/content/SyncStats.html
+http://developer.android.com/reference/android/content/UriMatcher.html
+http://developer.android.com/reference/android/content/ActivityNotFoundException.html
+http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
+http://developer.android.com/reference/android/content/IntentSender.SendIntentException.html
+http://developer.android.com/reference/android/content/OperationApplicationException.html
+http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
+http://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html
+http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
+http://developer.android.com/guide/topics/fundamentals.html
+http://developer.android.com/guide/topics/intents/intents-filters.html
+http://developer.android.com/reference/android/hardware/display/DisplayManager.DisplayListener.html
+http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECField.html
+http://developer.android.com/reference/java/security/spec/KeySpec.html
+http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
+http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
+http://developer.android.com/reference/java/security/spec/ECFieldFp.html
+http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
+http://developer.android.com/reference/java/security/spec/ECPoint.html
+http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/EllipticCurve.html
+http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
+http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
+http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
+http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
+http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
+http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
+http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
+http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
+http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
+http://developer.android.com/reference/android/media/MediaPlayer.html
+http://developer.android.com/reference/android/media/MediaRecorder.html
+http://developer.android.com/reference/android/media/CamcorderProfile.html
+http://developer.android.com/reference/javax/xml/namespace/QName.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethod.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
+http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
+http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
+http://developer.android.com/reference/android/view/inputmethod/CorrectionInfo.html
+http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
+http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
+http://developer.android.com/reference/android/view/inputmethod/InputBinding.html
+http://developer.android.com/reference/android/view/inputmethod/InputConnectionWrapper.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodInfo.html
+http://developer.android.com/reference/android/view/inputmethod/InputMethodSubtype.html
+http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
+http://developer.android.com/reference/android/text/InputType.html
+http://developer.android.com/reference/android/Manifest.html
+http://developer.android.com/reference/android/Manifest.permission_group.html
+http://developer.android.com/reference/android/R.html
+http://developer.android.com/reference/android/R.anim.html
+http://developer.android.com/reference/android/R.animator.html
+http://developer.android.com/reference/android/R.array.html
+http://developer.android.com/reference/android/R.bool.html
+http://developer.android.com/reference/android/R.color.html
+http://developer.android.com/reference/android/R.dimen.html
+http://developer.android.com/reference/android/R.drawable.html
+http://developer.android.com/reference/android/R.fraction.html
+http://developer.android.com/reference/android/R.interpolator.html
+http://developer.android.com/reference/android/R.menu.html
+http://developer.android.com/reference/android/R.mipmap.html
+http://developer.android.com/reference/android/R.plurals.html
+http://developer.android.com/reference/android/R.raw.html
+http://developer.android.com/reference/android/R.string.html
+http://developer.android.com/reference/android/R.xml.html
+http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html
http://developer.android.com/reference/android/net/nsd/NsdManager.DiscoveryListener.html
http://developer.android.com/reference/android/net/nsd/NsdManager.RegistrationListener.html
http://developer.android.com/reference/android/net/nsd/NsdManager.ResolveListener.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.html
http://developer.android.com/reference/android/net/nsd/NsdServiceInfo.html
-http://developer.android.com/reference/android/text/Editable.html
-http://developer.android.com/reference/android/util/SparseBooleanArray.html
-http://developer.android.com/reference/android/graphics/Region.html
-http://developer.android.com/reference/android/view/animation/Transformation.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
-http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
-http://developer.android.com/reference/android/text/TextWatcher.html
-http://developer.android.com/reference/android/view/ViewManager.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
-http://developer.android.com/reference/android/view/View.MeasureSpec.html
-http://developer.android.com/reference/java/io/Serializable.html
-http://developer.android.com/reference/java/lang/NullPointerException.html
-http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
-http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
-http://developer.android.com/reference/java/io/ObjectStreamException.html
+http://developer.android.com/reference/javax/crypto/SecretKey.html
+http://developer.android.com/reference/javax/crypto/Cipher.html
+http://developer.android.com/reference/javax/crypto/CipherInputStream.html
+http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
+http://developer.android.com/reference/javax/crypto/CipherSpi.html
+http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
+http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
+http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
+http://developer.android.com/reference/javax/crypto/KeyAgreement.html
+http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
+http://developer.android.com/reference/javax/crypto/KeyGenerator.html
+http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
+http://developer.android.com/reference/javax/crypto/Mac.html
+http://developer.android.com/reference/javax/crypto/MacSpi.html
+http://developer.android.com/reference/javax/crypto/NullCipher.html
+http://developer.android.com/reference/javax/crypto/SealedObject.html
+http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
+http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
+http://developer.android.com/reference/javax/crypto/BadPaddingException.html
+http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
+http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
+http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
+http://developer.android.com/reference/javax/crypto/ShortBufferException.html
+http://developer.android.com/reference/android/webkit/WebSettings.html
+http://developer.android.com/reference/android/webkit/WebViewClient.html
+http://developer.android.com/resources/tutorials/views/hello-webview.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
+http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePad.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
+http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
+http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
+http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
+http://developer.android.com/reference/org/apache/http/HttpRequest.html
+http://developer.android.com/reference/android/view/animation/Interpolator.html
+http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
+http://developer.android.com/reference/android/view/animation/Animation.Description.html
+http://developer.android.com/reference/android/view/animation/AnimationSet.html
+http://developer.android.com/reference/android/view/animation/AnimationUtils.html
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
+http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
+http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
+http://developer.android.com/reference/android/view/animation/RotateAnimation.html
+http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
+http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
+http://developer.android.com/reference/java/lang/Cloneable.html
+http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
+http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
+http://developer.android.com/reference/android/hardware/usb/UsbConstants.html
+http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
+http://developer.android.com/reference/android/hardware/usb/UsbEndpoint.html
+http://developer.android.com/reference/android/hardware/usb/UsbInterface.html
+http://developer.android.com/reference/android/hardware/usb/UsbRequest.html
+http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.LayoutParams.html
+http://developer.android.com/reference/android/webkit/WebChromeClient.html
+http://developer.android.com/reference/android/webkit/ConsoleMessage.html
+http://developer.android.com/reference/android/webkit/ConsoleMessage.MessageLevel.html
+http://developer.android.com/reference/javax/security/auth/Destroyable.html
+http://developer.android.com/reference/javax/security/auth/AuthPermission.html
+http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
+http://developer.android.com/reference/javax/security/auth/Subject.html
+http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
+http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
+http://developer.android.com/reference/java/util/Collection.html
+http://developer.android.com/reference/java/lang/InterruptedException.html
+http://developer.android.com/reference/java/security/PrivilegedAction.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
http://developer.android.com/reference/android/provider/BaseColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.Data.html
+http://developer.android.com/reference/android/net/Uri.Builder.html
+http://developer.android.com/reference/android/database/MatrixCursor.html
+http://developer.android.com/reference/android/provider/ContactsContract.html
+http://developer.android.com/reference/java/io/OutputStream.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
+http://developer.android.com/reference/java/nio/channels/FileChannel.html
+http://developer.android.com/reference/java/io/Flushable.html
+http://developer.android.com/reference/android/test/mock/MockContentProvider.html
+http://developer.android.com/reference/android/test/mock/MockContentResolver.html
+http://developer.android.com/reference/android/test/mock/MockContext.html
+http://developer.android.com/reference/android/test/mock/MockCursor.html
+http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
+http://developer.android.com/reference/android/test/mock/MockPackageManager.html
+http://developer.android.com/reference/android/test/mock/MockResources.html
+http://developer.android.com/reference/java/lang/Number.html
+http://developer.android.com/downloads/brand/Android_Robot_outlined.ai
+http://developer.android.com/downloads/brand/Google_Play_Store.ai
+http://developer.android.com/downloads/brand/en_app_rgb_wo.ai
+http://developer.android.com/downloads/brand/en_generic_rgb_wo.ai
+http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
+http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
+http://developer.android.com/reference/android/content/pm/ActivityInfo.html
+http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
+http://developer.android.com/reference/android/content/pm/ComponentInfo.html
+http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
+http://developer.android.com/reference/android/content/pm/LabeledIntent.html
+http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
+http://developer.android.com/reference/android/content/pm/PackageStats.html
+http://developer.android.com/reference/android/content/pm/PathPermission.html
+http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
+http://developer.android.com/reference/android/content/pm/PermissionInfo.html
+http://developer.android.com/reference/android/content/pm/ProviderInfo.html
+http://developer.android.com/reference/android/content/pm/ResolveInfo.html
+http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
+http://developer.android.com/reference/android/content/pm/ServiceInfo.html
+http://developer.android.com/reference/android/content/pm/Signature.html
+http://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html
+http://developer.android.com/reference/java/math/BigInteger.html
+http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.CursorToStringConverter.html
+http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.ViewBinder.html
+http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html
+http://developer.android.com/reference/android/support/v4/widget/EdgeEffectCompat.html
+http://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html
+http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.html
+http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListenerCompat.html
+http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html
+http://developer.android.com/reference/android/support/v4/content/CursorLoader.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
+http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.html
+http://developer.android.com/resources/samples/ContactManager/index.html
+http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.SyncColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredName.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Photo.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredPostal.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.GroupMembership.html
+http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
+http://developer.android.com/reference/android/provider/ContactsContract.Settings.html
+http://developer.android.com/reference/android/provider/ContactsContract.SyncState.html
+http://developer.android.com/reference/android/provider/ContactsContract.Groups.html
+http://developer.android.com/reference/android/provider/ContactsContract.GroupsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.SettingsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Entity.html
+http://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
+http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.CommonColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotos.html
+http://developer.android.com/reference/android/provider/ContactsContract.StreamItemsColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotosColumns.html
+http://developer.android.com/reference/android/provider/ContactsContract.DisplayPhoto.html
+http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.StreamItemPhotos.html
+http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html
+http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html
+http://developer.android.com/reference/java/util/Locale.html
+http://developer.android.com/reference/java/util/Calendar.html
+http://developer.android.com/reference/android/accounts/Account.html
+http://developer.android.com/reference/android/graphics/ColorFilter.html
+http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
+http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
+http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
+http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
+http://developer.android.com/reference/org/apache/http/params/HttpParams.html
+http://developer.android.com/reference/java/net/URI.html
+http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
+http://developer.android.com/reference/org/apache/http/RequestLine.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
+http://developer.android.com/reference/org/apache/http/Header.html
+http://developer.android.com/reference/org/apache/http/HttpMessage.html
+http://developer.android.com/reference/org/apache/http/HeaderIterator.html
+http://developer.android.com/reference/android/content/res/XmlResourceParser.html
+http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
+http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
+http://developer.android.com/reference/android/content/res/ColorStateList.html
+http://developer.android.com/reference/android/content/res/ObbInfo.html
+http://developer.android.com/reference/android/content/res/ObbScanner.html
+http://developer.android.com/resources/samples/MultiResolution/index.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
+http://developer.android.com/guide/practices/screens-support-1.5.html
+http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.html
+http://developer.android.com/reference/android/graphics/BitmapFactory.html
+http://developer.android.com/resources/dashboard/screens.html
+http://developer.android.com/shareables/training/LocationAware.zip
+http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
+http://developer.android.com/reference/java/security/GeneralSecurityException.html
+http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
+http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
+http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
+http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
+http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
+http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
+http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
+http://developer.android.com/reference/android/accounts/AccountManagerCallback.html
+http://developer.android.com/reference/android/accounts/AccountManagerFuture.html
+http://developer.android.com/reference/android/accounts/OnAccountsUpdateListener.html
+http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html
+http://developer.android.com/reference/android/accounts/AuthenticatorDescription.html
+http://developer.android.com/reference/android/accounts/AccountsException.html
+http://developer.android.com/reference/android/accounts/AuthenticatorException.html
+http://developer.android.com/reference/android/accounts/NetworkErrorException.html
+http://developer.android.com/reference/android/accounts/OperationCanceledException.html
+http://developer.android.com/reference/android/text/TextWatcher.html
+http://developer.android.com/reference/android/text/method/MovementMethod.html
+http://developer.android.com/reference/android/text/Editable.html
+http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
+http://developer.android.com/reference/android/text/InputFilter.html
+http://developer.android.com/reference/android/text/method/KeyListener.html
+http://developer.android.com/reference/android/text/Layout.html
+http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
+http://developer.android.com/reference/android/text/TextPaint.html
+http://developer.android.com/reference/android/text/Selection.html
+http://developer.android.com/reference/android/text/method/TransformationMethod.html
+http://developer.android.com/reference/android/graphics/Typeface.html
+http://developer.android.com/reference/android/text/style/URLSpan.html
+http://developer.android.com/reference/android/text/util/Linkify.html
+http://developer.android.com/reference/android/text/Editable.Factory.html
+http://developer.android.com/reference/android/text/Spannable.Factory.html
+http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
+http://developer.android.com/reference/org/apache/http/HttpException.html
+http://developer.android.com/reference/java/util/Comparator.html
+http://developer.android.com/reference/java/util/Enumeration.html
+http://developer.android.com/reference/java/util/Formattable.html
+http://developer.android.com/reference/java/util/Iterator.html
+http://developer.android.com/reference/java/util/ListIterator.html
+http://developer.android.com/reference/java/util/Map.Entry.html
+http://developer.android.com/reference/java/util/Observer.html
+http://developer.android.com/reference/java/util/RandomAccess.html
+http://developer.android.com/reference/java/util/SortedMap.html
+http://developer.android.com/reference/java/util/SortedSet.html
+http://developer.android.com/reference/java/util/AbstractCollection.html
+http://developer.android.com/reference/java/util/AbstractList.html
+http://developer.android.com/reference/java/util/AbstractMap.html
+http://developer.android.com/reference/java/util/AbstractMap.SimpleEntry.html
+http://developer.android.com/reference/java/util/AbstractMap.SimpleImmutableEntry.html
+http://developer.android.com/reference/java/util/AbstractQueue.html
+http://developer.android.com/reference/java/util/AbstractSequentialList.html
+http://developer.android.com/reference/java/util/AbstractSet.html
+http://developer.android.com/reference/java/util/ArrayDeque.html
+http://developer.android.com/reference/java/util/Arrays.html
+http://developer.android.com/reference/java/util/BitSet.html
+http://developer.android.com/reference/java/util/Collections.html
+http://developer.android.com/reference/java/util/Currency.html
+http://developer.android.com/reference/java/util/Date.html
+http://developer.android.com/reference/java/util/Dictionary.html
+http://developer.android.com/reference/java/util/EnumMap.html
+http://developer.android.com/reference/java/util/EnumSet.html
+http://developer.android.com/reference/java/util/EventListenerProxy.html
+http://developer.android.com/reference/java/util/FormattableFlags.html
+http://developer.android.com/reference/java/util/GregorianCalendar.html
+http://developer.android.com/reference/java/util/HashSet.html
+http://developer.android.com/reference/java/util/Hashtable.html
+http://developer.android.com/reference/java/util/IdentityHashMap.html
+http://developer.android.com/reference/java/util/LinkedHashMap.html
+http://developer.android.com/reference/java/util/LinkedHashSet.html
+http://developer.android.com/reference/java/util/LinkedList.html
+http://developer.android.com/reference/java/util/ListResourceBundle.html
+http://developer.android.com/reference/java/util/Observable.html
+http://developer.android.com/reference/java/util/Properties.html
+http://developer.android.com/reference/java/util/PropertyPermission.html
+http://developer.android.com/reference/java/util/PropertyResourceBundle.html
+http://developer.android.com/reference/java/util/Random.html
+http://developer.android.com/reference/java/util/ResourceBundle.html
+http://developer.android.com/reference/java/util/ResourceBundle.Control.html
+http://developer.android.com/reference/java/util/Scanner.html
+http://developer.android.com/reference/java/util/ServiceLoader.html
+http://developer.android.com/reference/java/util/SimpleTimeZone.html
+http://developer.android.com/reference/java/util/Stack.html
+http://developer.android.com/reference/java/util/StringTokenizer.html
+http://developer.android.com/reference/java/util/Timer.html
+http://developer.android.com/reference/java/util/TimerTask.html
+http://developer.android.com/reference/java/util/TimeZone.html
+http://developer.android.com/reference/java/util/TreeMap.html
+http://developer.android.com/reference/java/util/TreeSet.html
+http://developer.android.com/reference/java/util/UUID.html
+http://developer.android.com/reference/java/util/Vector.html
+http://developer.android.com/reference/java/util/WeakHashMap.html
+http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
+http://developer.android.com/reference/java/util/ConcurrentModificationException.html
+http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
+http://developer.android.com/reference/java/util/EmptyStackException.html
+http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
+http://developer.android.com/reference/java/util/FormatterClosedException.html
+http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
+http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
+http://developer.android.com/reference/java/util/IllegalFormatException.html
+http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
+http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
+http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
+http://developer.android.com/reference/java/util/InputMismatchException.html
+http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
+http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
+http://developer.android.com/reference/java/util/MissingFormatWidthException.html
+http://developer.android.com/reference/java/util/MissingResourceException.html
+http://developer.android.com/reference/java/util/NoSuchElementException.html
+http://developer.android.com/reference/java/util/TooManyListenersException.html
+http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
+http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
+http://developer.android.com/reference/java/util/ServiceConfigurationError.html
+http://developer.android.com/reference/javax/sql/ConnectionEvent.html
+http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
+http://developer.android.com/reference/java/beans/PropertyChangeEvent.html
+http://developer.android.com/reference/javax/sql/RowSetEvent.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
+http://developer.android.com/reference/javax/sql/StatementEvent.html
+http://developer.android.com/reference/javax/sql/PooledConnection.html
+http://developer.android.com/reference/javax/sql/RowSet.html
+http://developer.android.com/reference/javax/net/ssl/SSLSession.html
+http://developer.android.com/reference/java/beans/IndexedPropertyChangeEvent.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html
+http://developer.android.com/reference/java/security/AlgorithmParameters.html
+http://developer.android.com/reference/java/security/Key.html
+http://developer.android.com/reference/java/security/Provider.html
+http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
+http://developer.android.com/reference/java/security/InvalidKeyException.html
+http://developer.android.com/reference/java/security/NoSuchProviderException.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
+http://developer.android.com/reference/org/apache/http/auth/Credentials.html
+http://developer.android.com/reference/org/apache/http/auth/AUTH.html
+http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
+http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
+http://developer.android.com/reference/org/apache/http/auth/AuthState.html
+http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
+http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
+http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
+http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
+http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
+http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
+http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
+http://developer.android.com/reference/android/hardware/SensorListener.html
+http://developer.android.com/shareables/training/NewsReader.zip
+http://developer.android.com/sdk/compatibility-library.html
+http://developer.android.com/resources/samples/SearchableDictionary/index.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewFilterMode.html
+http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.html
+http://developer.android.com/reference/android/support/v13/app/FragmentTabHost.html
+http://developer.android.com/guide/developing/tools/traceview.html
+http://developer.android.com/reference/java/lang/annotation/Annotation.html
+http://developer.android.com/reference/java/lang/annotation/ElementType.html
+http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
+http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
+http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
+http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
+http://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html
+http://developer.android.com/reference/android/media/AudioRecord.OnRecordPositionUpdateListener.html
+http://developer.android.com/reference/android/media/AudioTrack.OnPlaybackPositionUpdateListener.html
+http://developer.android.com/reference/android/media/JetPlayer.OnJetEventListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnTimedTextListener.html
+http://developer.android.com/reference/android/media/MediaPlayer.OnVideoSizeChangedListener.html
+http://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html
+http://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html
+http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
+http://developer.android.com/reference/android/media/SoundPool.OnLoadCompleteListener.html
+http://developer.android.com/reference/android/media/AsyncPlayer.html
+http://developer.android.com/reference/android/media/AudioFormat.html
+http://developer.android.com/reference/android/media/AudioRecord.html
+http://developer.android.com/reference/android/media/AudioTrack.html
+http://developer.android.com/reference/android/media/CameraProfile.html
+http://developer.android.com/reference/android/media/ExifInterface.html
+http://developer.android.com/reference/android/media/FaceDetector.html
+http://developer.android.com/reference/android/media/FaceDetector.Face.html
+http://developer.android.com/reference/android/media/MediaActionSound.html
+http://developer.android.com/reference/android/media/MediaCodec.html
+http://developer.android.com/reference/android/media/MediaCodec.BufferInfo.html
+http://developer.android.com/reference/android/media/MediaCodec.CryptoInfo.html
+http://developer.android.com/reference/android/media/MediaCodecInfo.html
+http://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html
+http://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html
+http://developer.android.com/reference/android/media/MediaCodecList.html
+http://developer.android.com/reference/android/media/MediaCrypto.html
+http://developer.android.com/reference/android/media/MediaExtractor.html
+http://developer.android.com/reference/android/media/MediaFormat.html
+http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
+http://developer.android.com/reference/android/media/MediaPlayer.TrackInfo.html
+http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
+http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
+http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
+http://developer.android.com/reference/android/media/MediaRecorder.VideoEncoder.html
+http://developer.android.com/reference/android/media/MediaRecorder.VideoSource.html
+http://developer.android.com/reference/android/media/MediaRouter.Callback.html
+http://developer.android.com/reference/android/media/MediaRouter.RouteCategory.html
+http://developer.android.com/reference/android/media/MediaRouter.RouteGroup.html
+http://developer.android.com/reference/android/media/MediaRouter.RouteInfo.html
+http://developer.android.com/reference/android/media/MediaRouter.SimpleCallback.html
+http://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo.html
+http://developer.android.com/reference/android/media/MediaRouter.VolumeCallback.html
+http://developer.android.com/reference/android/media/MediaSyncEvent.html
+http://developer.android.com/reference/android/media/RemoteControlClient.html
+http://developer.android.com/reference/android/media/RemoteControlClient.MetadataEditor.html
+http://developer.android.com/reference/android/media/Ringtone.html
+http://developer.android.com/reference/android/media/RingtoneManager.html
+http://developer.android.com/reference/android/media/SoundPool.html
+http://developer.android.com/reference/android/media/ThumbnailUtils.html
+http://developer.android.com/reference/android/media/TimedText.html
+http://developer.android.com/reference/android/media/ToneGenerator.html
+http://developer.android.com/reference/android/media/MediaCodec.CryptoException.html
+http://developer.android.com/reference/android/media/MediaCryptoException.html
+http://developer.android.com/reference/java/lang/Appendable.html
+http://developer.android.com/reference/java/lang/Comparable.html
+http://developer.android.com/reference/java/lang/Iterable.html
+http://developer.android.com/reference/java/lang/Readable.html
+http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
+http://developer.android.com/reference/java/lang/Boolean.html
+http://developer.android.com/reference/java/lang/Byte.html
+http://developer.android.com/reference/java/lang/Character.html
+http://developer.android.com/reference/java/lang/Character.Subset.html
+http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
+http://developer.android.com/reference/java/lang/Compiler.html
+http://developer.android.com/reference/java/lang/Double.html
+http://developer.android.com/reference/java/lang/Enum.html
+http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
+http://developer.android.com/reference/java/lang/Long.html
+http://developer.android.com/reference/java/lang/Package.html
+http://developer.android.com/reference/java/lang/Process.html
+http://developer.android.com/reference/java/lang/ProcessBuilder.html
+http://developer.android.com/reference/java/lang/Runtime.html
+http://developer.android.com/reference/java/lang/RuntimePermission.html
+http://developer.android.com/reference/java/lang/SecurityManager.html
+http://developer.android.com/reference/java/lang/Short.html
+http://developer.android.com/reference/java/lang/StrictMath.html
+http://developer.android.com/reference/java/lang/StringBuffer.html
+http://developer.android.com/reference/java/lang/ThreadGroup.html
+http://developer.android.com/reference/java/lang/ThreadLocal.html
+http://developer.android.com/reference/java/lang/Void.html
+http://developer.android.com/reference/java/lang/Thread.State.html
+http://developer.android.com/reference/java/lang/ArithmeticException.html
+http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
+http://developer.android.com/reference/java/lang/ArrayStoreException.html
+http://developer.android.com/reference/java/lang/ClassCastException.html
+http://developer.android.com/reference/java/lang/ClassNotFoundException.html
+http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
+http://developer.android.com/reference/java/lang/IllegalAccessException.html
+http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
+http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
+http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
+http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
+http://developer.android.com/reference/java/lang/NoSuchFieldException.html
+http://developer.android.com/reference/java/lang/NoSuchMethodException.html
+http://developer.android.com/reference/java/lang/NumberFormatException.html
+http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
+http://developer.android.com/reference/java/lang/TypeNotPresentException.html
+http://developer.android.com/reference/java/lang/AbstractMethodError.html
+http://developer.android.com/reference/java/lang/AssertionError.html
+http://developer.android.com/reference/java/lang/ClassCircularityError.html
+http://developer.android.com/reference/java/lang/ClassFormatError.html
+http://developer.android.com/reference/java/lang/Error.html
+http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
+http://developer.android.com/reference/java/lang/IllegalAccessError.html
+http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
+http://developer.android.com/reference/java/lang/InstantiationError.html
+http://developer.android.com/reference/java/lang/InternalError.html
+http://developer.android.com/reference/java/lang/LinkageError.html
+http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
+http://developer.android.com/reference/java/lang/NoSuchFieldError.html
+http://developer.android.com/reference/java/lang/NoSuchMethodError.html
+http://developer.android.com/reference/java/lang/OutOfMemoryError.html
+http://developer.android.com/reference/java/lang/StackOverflowError.html
+http://developer.android.com/reference/java/lang/ThreadDeath.html
+http://developer.android.com/reference/java/lang/UnknownError.html
+http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
+http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
+http://developer.android.com/reference/java/lang/VirtualMachineError.html
+http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
+http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
+http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
+http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
+http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
+http://developer.android.com/reference/java/nio/InvalidMarkException.html
+http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
+http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
+http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
+http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
+http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
+http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
+http://developer.android.com/reference/java/nio/channels/Selector.html
+http://developer.android.com/reference/java/nio/channels/SocketChannel.html
+http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
+http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
+http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
+http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
+http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
+http://developer.android.com/reference/org/apache/http/message/LineParser.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
+http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
+http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
+http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
+http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
+http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
+http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
+http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
+http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
+http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
+http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
+http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
+http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
+http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
+http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
+http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
+http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
+http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
+http://developer.android.com/reference/java/math/BigDecimal.html
+http://developer.android.com/reference/java/math/MathContext.html
+http://developer.android.com/reference/java/math/RoundingMode.html
+http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
+http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
+http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
+http://developer.android.com/reference/java/nio/ByteBuffer.html
+http://developer.android.com/reference/java/security/SecureRandom.html
+http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
+http://developer.android.com/reference/java/nio/charset/Charset.html
+http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
+http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
+http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
+http://developer.android.com/reference/java/util/regex/Pattern.html
http://developer.android.com/reference/android/provider/CalendarContract.AttendeesColumns.html
http://developer.android.com/reference/android/provider/CalendarContract.CalendarAlertsColumns.html
http://developer.android.com/reference/android/provider/CalendarContract.CalendarCacheColumns.html
@@ -1262,25 +2338,16 @@
http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.BaseSyncColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.BaseTypes.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.CommonColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.ContactNameColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.ContactOptionsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.ContactStatusColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html
http://developer.android.com/reference/android/provider/ContactsContract.DisplayNameSources.html
http://developer.android.com/reference/android/provider/ContactsContract.FullNameStyle.html
-http://developer.android.com/reference/android/provider/ContactsContract.GroupsColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.PhoneticNameStyle.html
http://developer.android.com/reference/android/provider/ContactsContract.PresenceColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SettingsColumns.html
http://developer.android.com/reference/android/provider/ContactsContract.StatusColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotosColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncColumns.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
@@ -1328,55 +2395,32 @@
http://developer.android.com/reference/android/provider/Contacts.Phones.html
http://developer.android.com/reference/android/provider/Contacts.Photos.html
http://developer.android.com/reference/android/provider/Contacts.Settings.html
-http://developer.android.com/reference/android/provider/ContactsContract.html
http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Event.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.GroupMembership.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Identity.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Im.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Nickname.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Note.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Organization.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Photo.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Relation.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.SipAddress.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredName.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredPostal.html
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Website.html
http://developer.android.com/reference/android/provider/ContactsContract.Contacts.AggregationSuggestions.html
http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Entity.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html
http://developer.android.com/reference/android/provider/ContactsContract.Contacts.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.Data.html
http://developer.android.com/reference/android/provider/ContactsContract.DataUsageFeedback.html
http://developer.android.com/reference/android/provider/ContactsContract.Directory.html
-http://developer.android.com/reference/android/provider/ContactsContract.DisplayPhoto.html
-http://developer.android.com/reference/android/provider/ContactsContract.Groups.html
http://developer.android.com/reference/android/provider/ContactsContract.Intents.html
-http://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html
http://developer.android.com/reference/android/provider/ContactsContract.Presence.html
-http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
http://developer.android.com/reference/android/provider/ContactsContract.ProfileSyncState.html
http://developer.android.com/reference/android/provider/ContactsContract.QuickContact.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html
http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html
http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.StreamItems.html
http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html
-http://developer.android.com/reference/android/provider/ContactsContract.Settings.html
http://developer.android.com/reference/android/provider/ContactsContract.StatusUpdates.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncState.html
http://developer.android.com/reference/android/provider/LiveFolders.html
-http://developer.android.com/reference/android/provider/MediaStore.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
@@ -1388,13 +2432,13 @@
http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html
http://developer.android.com/reference/android/provider/MediaStore.Files.html
http://developer.android.com/reference/android/provider/MediaStore.Images.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
http://developer.android.com/reference/android/provider/MediaStore.Video.html
http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
http://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails.html
http://developer.android.com/reference/android/provider/SearchRecentSuggestions.html
http://developer.android.com/reference/android/provider/Settings.html
+http://developer.android.com/reference/android/provider/Settings.Global.html
http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
http://developer.android.com/reference/android/provider/Settings.Secure.html
http://developer.android.com/reference/android/provider/Settings.System.html
@@ -1407,598 +2451,19 @@
http://developer.android.com/reference/android/provider/VoicemailContract.Status.html
http://developer.android.com/reference/android/provider/VoicemailContract.Voicemails.html
http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
-http://developer.android.com/reference/android/accounts/Account.html
-http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
-http://developer.android.com/reference/org/apache/http/params/HttpParams.html
-http://developer.android.com/reference/android/content/ClipboardManager.OnPrimaryClipChangedListener.html
-http://developer.android.com/reference/android/content/ComponentCallbacks.html
-http://developer.android.com/reference/android/content/ComponentCallbacks2.html
-http://developer.android.com/reference/android/content/ContentProvider.PipeDataWriter.html
-http://developer.android.com/reference/android/content/DialogInterface.html
-http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnShowListener.html
-http://developer.android.com/reference/android/content/EntityIterator.html
-http://developer.android.com/reference/android/content/IntentSender.OnFinished.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCanceledListener.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/content/ServiceConnection.html
-http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
-http://developer.android.com/reference/android/content/SyncStatusObserver.html
-http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
-http://developer.android.com/reference/android/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.PendingResult.html
-http://developer.android.com/reference/android/content/ClipboardManager.html
-http://developer.android.com/reference/android/content/ClipData.Item.html
-http://developer.android.com/reference/android/content/ClipDescription.html
-http://developer.android.com/reference/android/content/ComponentName.html
-http://developer.android.com/reference/android/content/ContentProviderClient.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.Builder.html
-http://developer.android.com/reference/android/content/ContentProviderResult.html
-http://developer.android.com/reference/android/content/ContentQueryMap.html
-http://developer.android.com/reference/android/content/ContentResolver.html
-http://developer.android.com/reference/android/content/ContentUris.html
-http://developer.android.com/reference/android/content/ContentValues.html
-http://developer.android.com/reference/android/content/ContextWrapper.html
-http://developer.android.com/reference/android/content/CursorLoader.html
-http://developer.android.com/reference/android/content/Entity.html
-http://developer.android.com/reference/android/content/Entity.NamedContentValues.html
-http://developer.android.com/reference/android/content/Intent.FilterComparison.html
-http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
-http://developer.android.com/reference/android/content/IntentFilter.html
-http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
-http://developer.android.com/reference/android/content/IntentSender.html
-http://developer.android.com/reference/android/content/Loader.html
-http://developer.android.com/reference/android/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/android/content/MutableContextWrapper.html
-http://developer.android.com/reference/android/content/PeriodicSync.html
-http://developer.android.com/reference/android/content/SyncAdapterType.html
-http://developer.android.com/reference/android/content/SyncContext.html
-http://developer.android.com/reference/android/content/SyncInfo.html
-http://developer.android.com/reference/android/content/SyncResult.html
-http://developer.android.com/reference/android/content/SyncStats.html
-http://developer.android.com/reference/android/content/UriMatcher.html
-http://developer.android.com/reference/android/content/ActivityNotFoundException.html
-http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
-http://developer.android.com/reference/android/content/IntentSender.SendIntentException.html
-http://developer.android.com/reference/android/content/OperationApplicationException.html
-http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
-http://developer.android.com/reference/android/test/mock/MockContentProvider.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
-http://developer.android.com/reference/android/content/pm/ProviderInfo.html
-http://developer.android.com/reference/android/content/pm/PathPermission.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
-http://developer.android.com/reference/android/os/CancellationSignal.html
-http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
-http://developer.android.com/reference/android/database/SQLException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
-http://developer.android.com/reference/android/app/ActivityManager.html
-http://developer.android.com/reference/java/io/FileNotFoundException.html
-http://developer.android.com/reference/java/lang/IllegalArgumentException.html
-http://developer.android.com/reference/android/os/OperationCanceledException.html
-http://developer.android.com/reference/java/lang/Cloneable.html
-http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
-http://developer.android.com/reference/java/lang/Throwable.html
-http://developer.android.com/reference/java/lang/Exception.html
-http://developer.android.com/reference/java/lang/StackTraceElement.html
-http://developer.android.com/reference/java/io/PrintWriter.html
-http://developer.android.com/reference/java/io/PrintStream.html
-http://developer.android.com/reference/android/app/ActionBar.OnMenuVisibilityListener.html
-http://developer.android.com/reference/android/app/ActionBar.OnNavigationListener.html
-http://developer.android.com/reference/android/app/ActionBar.TabListener.html
-http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
-http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.OnBreadCrumbClickListener.html
-http://developer.android.com/reference/android/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
-http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
-http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
-http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
-http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
-http://developer.android.com/reference/android/app/ActionBar.html
-http://developer.android.com/reference/android/app/ActionBar.LayoutParams.html
-http://developer.android.com/reference/android/app/ActionBar.Tab.html
-http://developer.android.com/reference/android/app/ActivityGroup.html
-http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityOptions.html
-http://developer.android.com/reference/android/app/AlertDialog.html
-http://developer.android.com/reference/android/app/AlertDialog.Builder.html
-http://developer.android.com/reference/android/app/AliasActivity.html
-http://developer.android.com/reference/android/app/Application.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.AnrInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.BatteryInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.CrashInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/DatePickerDialog.html
-http://developer.android.com/reference/android/app/Dialog.html
-http://developer.android.com/reference/android/app/DialogFragment.html
-http://developer.android.com/reference/android/app/DownloadManager.html
-http://developer.android.com/reference/android/app/DownloadManager.Query.html
-http://developer.android.com/reference/android/app/DownloadManager.Request.html
-http://developer.android.com/reference/android/app/ExpandableListActivity.html
-http://developer.android.com/reference/android/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
-http://developer.android.com/reference/android/app/IntentService.html
-http://developer.android.com/reference/android/app/KeyguardManager.html
-http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
-http://developer.android.com/reference/android/app/LauncherActivity.html
-http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
-http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
-http://developer.android.com/reference/android/app/ListFragment.html
-http://developer.android.com/reference/android/app/LoaderManager.html
-http://developer.android.com/reference/android/app/LocalActivityManager.html
-http://developer.android.com/reference/android/app/MediaRouteActionProvider.html
-http://developer.android.com/reference/android/app/MediaRouteButton.html
-http://developer.android.com/reference/android/app/NativeActivity.html
-http://developer.android.com/reference/android/app/Notification.html
-http://developer.android.com/reference/android/app/Notification.BigPictureStyle.html
-http://developer.android.com/reference/android/app/Notification.BigTextStyle.html
-http://developer.android.com/reference/android/app/Notification.Builder.html
-http://developer.android.com/reference/android/app/Notification.InboxStyle.html
-http://developer.android.com/reference/android/app/Notification.Style.html
-http://developer.android.com/reference/android/app/NotificationManager.html
-http://developer.android.com/reference/android/app/ProgressDialog.html
-http://developer.android.com/reference/android/app/SearchableInfo.html
-http://developer.android.com/reference/android/app/SearchManager.html
-http://developer.android.com/reference/android/app/TabActivity.html
-http://developer.android.com/reference/android/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/app/TimePickerDialog.html
-http://developer.android.com/reference/android/app/UiModeManager.html
-http://developer.android.com/reference/android/app/WallpaperInfo.html
-http://developer.android.com/reference/android/app/WallpaperManager.html
-http://developer.android.com/reference/android/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
-http://developer.android.com/reference/android/speech/RecognitionService.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeechService.html
-http://developer.android.com/reference/android/net/VpnService.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
-http://developer.android.com/reference/android/R.styleable.html
-http://developer.android.com/guide/topics/fundamentals/services.html
-http://developer.android.com/guide/developing/tools/aidl.html
-http://developer.android.com/guide/topics/security/security.html
-http://developer.android.com/reference/android/os/Messenger.html
-http://developer.android.com/reference/android/accounts/AccountManager.html
-http://developer.android.com/reference/android/text/ClipboardManager.html
-http://developer.android.com/reference/android/net/ConnectivityManager.html
-http://developer.android.com/reference/android/os/DropBoxManager.html
-http://developer.android.com/reference/android/hardware/input/InputManager.html
-http://developer.android.com/reference/android/view/LayoutInflater.html
-http://developer.android.com/reference/android/location/LocationManager.html
-http://developer.android.com/reference/android/media/MediaRouter.html
-http://developer.android.com/reference/android/nfc/NfcManager.html
-http://developer.android.com/reference/android/os/PowerManager.html
-http://developer.android.com/reference/android/hardware/SensorManager.html
-http://developer.android.com/reference/android/os/storage/StorageManager.html
-http://developer.android.com/reference/android/telephony/TelephonyManager.html
-http://developer.android.com/reference/android/view/textservice/TextServicesManager.html
-http://developer.android.com/reference/android/hardware/usb/UsbManager.html
-http://developer.android.com/reference/android/os/Vibrator.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.html
-http://developer.android.com/reference/android/view/WindowManager.html
-http://developer.android.com/reference/java/io/FileDescriptor.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
-http://developer.android.com/reference/android/content/res/AssetManager.html
-http://developer.android.com/reference/java/io/File.html
-http://developer.android.com/reference/java/lang/ClassLoader.html
-http://developer.android.com/reference/android/os/Environment.html
-http://developer.android.com/reference/android/os/Looper.html
-http://developer.android.com/reference/android/content/res/Resources.Theme.html
-http://developer.android.com/reference/java/io/FileInputStream.html
-http://developer.android.com/reference/java/io/FileOutputStream.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
-http://developer.android.com/reference/android/database/DatabaseErrorHandler.html
-http://developer.android.com/reference/java/util/Formatter.html
-http://developer.android.com/reference/android/os/AsyncTask.html
-http://developer.android.com/reference/android/content/pm/ServiceInfo.html
-http://developer.android.com/reference/android/appwidget/AppWidgetHost.html
-http://developer.android.com/reference/android/view/InputDevice.html
-http://developer.android.com/guide/topics/fundamentals/activities.html
-http://developer.android.com/guide/topics/fundamentals/fragments.html
-http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
-http://developer.android.com/reference/java/lang/IllegalStateException.html
-http://developer.android.com/reference/javax/xml/namespace/NamespaceContext.html
-http://developer.android.com/reference/javax/xml/transform/Source.html
-http://developer.android.com/reference/javax/xml/XMLConstants.html
-http://developer.android.com/reference/javax/xml/transform/Transformer.html
-http://developer.android.com/reference/javax/sql/CommonDataSource.html
-http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
-http://developer.android.com/reference/javax/sql/DataSource.html
-http://developer.android.com/reference/javax/sql/PooledConnection.html
-http://developer.android.com/reference/javax/sql/RowSet.html
-http://developer.android.com/reference/javax/sql/RowSetInternal.html
-http://developer.android.com/reference/javax/sql/RowSetListener.html
-http://developer.android.com/reference/javax/sql/RowSetMetaData.html
-http://developer.android.com/reference/javax/sql/RowSetReader.html
-http://developer.android.com/reference/javax/sql/RowSetWriter.html
-http://developer.android.com/reference/javax/sql/StatementEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionEvent.html
-http://developer.android.com/reference/javax/sql/RowSetEvent.html
-http://developer.android.com/reference/javax/sql/StatementEvent.html
-http://developer.android.com/reference/android/view/animation/Interpolator.html
-http://developer.android.com/reference/android/view/ViewConfiguration.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.AccessibilityStateChangeListener.html
-http://developer.android.com/reference/android/os/Parcelable.Creator.html
-http://developer.android.com/reference/android/os/Parcel.html
-http://developer.android.com/reference/android/net/wifi/ScanResult.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
-http://developer.android.com/reference/android/net/wifi/WifiInfo.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
-http://developer.android.com/reference/android/net/wifi/WpsInfo.html
-http://developer.android.com/reference/android/net/wifi/SupplicantState.html
-http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
-http://developer.android.com/reference/java/nio/ByteBuffer.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
-http://developer.android.com/reference/android/test/TestSuiteProvider.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
-http://developer.android.com/reference/android/test/ActivityTestCase.html
-http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestRunner.html
-http://developer.android.com/reference/android/test/ApplicationTestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
-http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
-http://developer.android.com/reference/android/test/IsolatedContext.html
-http://developer.android.com/reference/android/test/LoaderTestCase.html
-http://developer.android.com/reference/android/test/MoreAsserts.html
-http://developer.android.com/reference/android/test/ProviderTestCase.html
-http://developer.android.com/reference/android/test/ProviderTestCase2.html
-http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
-http://developer.android.com/reference/android/test/ServiceTestCase.html
-http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
-http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
-http://developer.android.com/reference/android/test/TouchUtils.html
-http://developer.android.com/reference/android/test/ViewAsserts.html
-http://developer.android.com/reference/android/test/AssertionFailedError.html
-http://developer.android.com/reference/android/test/ComparisonFailure.html
-http://developer.android.com/reference/junit/framework/TestCase.html
-http://developer.android.com/reference/junit/framework/TestSuite.html
-http://developer.android.com/reference/android/test/mock/MockApplication.html
-http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
-http://developer.android.com/reference/android/support/v4/database/DatabaseUtilsCompat.html
-http://developer.android.com/reference/android/database/DatabaseUtils.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.html
-http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html
-http://developer.android.com/reference/android/support/v4/app/ListFragment.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.html
-http://developer.android.com/reference/android/support/v4/app/NavUtils.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigTextStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Style.html
-http://developer.android.com/reference/android/support/v4/app/ServiceCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentBuilder.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentReader.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilderHoneycomb.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
-http://developer.android.com/reference/java/io/IOException.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
-http://developer.android.com/reference/android/content/pm/LabeledIntent.html
-http://developer.android.com/guide/topics/intents/intents-filters.html
-http://developer.android.com/reference/android/view/Menu.html
-http://developer.android.com/reference/java/lang/Integer.html
-http://developer.android.com/reference/android/content/pm/ActivityInfo.html
-http://developer.android.com/reference/android/os/BatteryManager.html
-http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
-http://developer.android.com/reference/java/net/URISyntaxException.html
+http://developer.android.com/reference/android/support/v4/view/AccessibilityDelegateCompat.html
+http://developer.android.com/reference/android/support/v4/view/ViewCompat.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
+http://developer.android.com/reference/android/opengl/Matrix.html
http://developer.android.com/shareables/training/EffectiveNavigation.zip
-http://developer.android.com/reference/java/lang/System.html
-http://developer.android.com/reference/android/os/CancellationSignal.OnCancelListener.html
-http://developer.android.com/reference/android/os/Handler.Callback.html
-http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
-http://developer.android.com/reference/android/os/IInterface.html
-http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
-http://developer.android.com/reference/android/os/Parcelable.ClassLoaderCreator.html
-http://developer.android.com/reference/android/os/RecoverySystem.ProgressListener.html
-http://developer.android.com/reference/android/os/Binder.html
-http://developer.android.com/reference/android/os/Build.html
-http://developer.android.com/reference/android/os/Build.VERSION.html
-http://developer.android.com/reference/android/os/ConditionVariable.html
-http://developer.android.com/reference/android/os/CountDownTimer.html
-http://developer.android.com/reference/android/os/Debug.InstructionCount.html
-http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
-http://developer.android.com/reference/android/os/DropBoxManager.Entry.html
-http://developer.android.com/reference/android/os/FileObserver.html
-http://developer.android.com/reference/android/os/HandlerThread.html
-http://developer.android.com/reference/android/os/MemoryFile.html
-http://developer.android.com/reference/android/os/Message.html
-http://developer.android.com/reference/android/os/MessageQueue.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/os/ParcelUuid.html
-http://developer.android.com/reference/android/os/PatternMatcher.html
-http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
-http://developer.android.com/reference/android/os/Process.html
-http://developer.android.com/reference/android/os/RecoverySystem.html
-http://developer.android.com/reference/android/os/RemoteCallbackList.html
-http://developer.android.com/reference/android/os/ResultReceiver.html
-http://developer.android.com/reference/android/os/StatFs.html
-http://developer.android.com/reference/android/os/StrictMode.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html
-http://developer.android.com/reference/android/os/SystemClock.html
-http://developer.android.com/reference/android/os/TokenWatcher.html
-http://developer.android.com/reference/android/os/WorkSource.html
-http://developer.android.com/reference/android/os/AsyncTask.Status.html
-http://developer.android.com/reference/android/os/BadParcelableException.html
-http://developer.android.com/reference/android/os/DeadObjectException.html
-http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
-http://developer.android.com/reference/android/os/ParcelFormatException.html
-http://developer.android.com/reference/android/os/RemoteException.html
-http://developer.android.com/reference/android/os/TransactionTooLargeException.html
-http://developer.android.com/reference/java/lang/Appendable.html
-http://developer.android.com/reference/java/lang/Comparable.html
-http://developer.android.com/reference/java/lang/Iterable.html
-http://developer.android.com/reference/java/lang/Readable.html
-http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
-http://developer.android.com/reference/java/lang/Boolean.html
-http://developer.android.com/reference/java/lang/Byte.html
-http://developer.android.com/reference/java/lang/Character.html
-http://developer.android.com/reference/java/lang/Character.Subset.html
-http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
-http://developer.android.com/reference/java/lang/Compiler.html
-http://developer.android.com/reference/java/lang/Double.html
-http://developer.android.com/reference/java/lang/Enum.html
-http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
-http://developer.android.com/reference/java/lang/Long.html
-http://developer.android.com/reference/java/lang/Math.html
-http://developer.android.com/reference/java/lang/Number.html
-http://developer.android.com/reference/java/lang/Package.html
-http://developer.android.com/reference/java/lang/Process.html
-http://developer.android.com/reference/java/lang/ProcessBuilder.html
-http://developer.android.com/reference/java/lang/Runtime.html
-http://developer.android.com/reference/java/lang/RuntimePermission.html
-http://developer.android.com/reference/java/lang/SecurityManager.html
-http://developer.android.com/reference/java/lang/Short.html
-http://developer.android.com/reference/java/lang/StrictMath.html
-http://developer.android.com/reference/java/lang/StringBuffer.html
-http://developer.android.com/reference/java/lang/StringBuilder.html
-http://developer.android.com/reference/java/lang/Thread.html
-http://developer.android.com/reference/java/lang/ThreadGroup.html
-http://developer.android.com/reference/java/lang/ThreadLocal.html
-http://developer.android.com/reference/java/lang/Void.html
-http://developer.android.com/reference/java/lang/Thread.State.html
-http://developer.android.com/reference/java/lang/ArithmeticException.html
-http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/ArrayStoreException.html
-http://developer.android.com/reference/java/lang/ClassCastException.html
-http://developer.android.com/reference/java/lang/ClassNotFoundException.html
-http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
-http://developer.android.com/reference/java/lang/IllegalAccessException.html
-http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
-http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
-http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/InstantiationException.html
-http://developer.android.com/reference/java/lang/InterruptedException.html
-http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
-http://developer.android.com/reference/java/lang/NoSuchFieldException.html
-http://developer.android.com/reference/java/lang/NoSuchMethodException.html
-http://developer.android.com/reference/java/lang/NumberFormatException.html
-http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/TypeNotPresentException.html
-http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
-http://developer.android.com/reference/java/lang/AbstractMethodError.html
-http://developer.android.com/reference/java/lang/AssertionError.html
-http://developer.android.com/reference/java/lang/ClassCircularityError.html
-http://developer.android.com/reference/java/lang/ClassFormatError.html
-http://developer.android.com/reference/java/lang/Error.html
-http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
-http://developer.android.com/reference/java/lang/IllegalAccessError.html
-http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
-http://developer.android.com/reference/java/lang/InstantiationError.html
-http://developer.android.com/reference/java/lang/InternalError.html
-http://developer.android.com/reference/java/lang/LinkageError.html
-http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
-http://developer.android.com/reference/java/lang/NoSuchFieldError.html
-http://developer.android.com/reference/java/lang/NoSuchMethodError.html
-http://developer.android.com/reference/java/lang/OutOfMemoryError.html
-http://developer.android.com/reference/java/lang/StackOverflowError.html
-http://developer.android.com/reference/java/lang/ThreadDeath.html
-http://developer.android.com/reference/java/lang/UnknownError.html
-http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
-http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
-http://developer.android.com/reference/java/lang/VerifyError.html
-http://developer.android.com/reference/java/lang/VirtualMachineError.html
-http://developer.android.com/reference/java/io/Closeable.html
-http://developer.android.com/shareables/sample_images.zip
-http://developer.android.com/reference/android/os/storage/OnObbStateChangeListener.html
-http://developer.android.com/reference/android/view/ActionProvider.VisibilityListener.html
-http://developer.android.com/reference/android/view/Choreographer.FrameCallback.html
-http://developer.android.com/reference/android/view/CollapsibleActionView.html
-http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
-http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
-http://developer.android.com/reference/android/view/InputQueue.Callback.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory2.html
-http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
-http://developer.android.com/reference/android/view/MenuItem.html
-http://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html
-http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SubMenu.html
-http://developer.android.com/reference/android/view/SurfaceHolder.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback2.html
-http://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener.html
-http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnScrollChangedListener.html
-http://developer.android.com/reference/android/view/Window.Callback.html
-http://developer.android.com/reference/android/view/AbsSavedState.html
-http://developer.android.com/reference/android/view/ActionProvider.html
-http://developer.android.com/reference/android/view/Choreographer.html
-http://developer.android.com/reference/android/view/ContextThemeWrapper.html
-http://developer.android.com/reference/android/view/Display.html
-http://developer.android.com/reference/android/view/FocusFinder.html
-http://developer.android.com/reference/android/view/GestureDetector.html
-http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/reference/android/view/Gravity.html
-http://developer.android.com/reference/android/view/HapticFeedbackConstants.html
-http://developer.android.com/reference/android/view/InputDevice.MotionRange.html
-http://developer.android.com/reference/android/view/InputEvent.html
-http://developer.android.com/reference/android/view/InputQueue.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
-http://developer.android.com/reference/android/view/MenuInflater.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerCoords.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerProperties.html
-http://developer.android.com/reference/android/view/OrientationEventListener.html
-http://developer.android.com/reference/android/view/OrientationListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.SimpleOnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SoundEffectConstants.html
-http://developer.android.com/reference/android/view/Surface.html
-http://developer.android.com/reference/android/view/SurfaceView.html
-http://developer.android.com/reference/android/view/TextureView.html
-http://developer.android.com/reference/android/view/VelocityTracker.html
-http://developer.android.com/reference/android/view/View.BaseSavedState.html
-http://developer.android.com/reference/android/view/ViewDebug.html
-http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
-http://developer.android.com/reference/android/view/ViewStub.html
-http://developer.android.com/reference/android/view/Window.html
-http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
-http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
-http://developer.android.com/reference/android/view/InflateException.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.UnavailableException.html
-http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
-http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
-http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
-http://developer.android.com/reference/java/net/InetAddress.html
-http://developer.android.com/reference/android/media/effect/EffectUpdateListener.html
-http://developer.android.com/reference/android/media/effect/Effect.html
-http://developer.android.com/reference/android/media/effect/EffectContext.html
-http://developer.android.com/reference/android/media/effect/EffectFactory.html
-http://developer.android.com/reference/android/opengl/GLES20.html
-http://developer.android.com/reference/java/sql/ResultSetMetaData.html
-http://developer.android.com/reference/java/sql/Wrapper.html
-http://developer.android.com/reference/java/sql/SQLException.html
-http://developer.android.com/reference/android/util/AndroidRuntimeException.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
-http://developer.android.com/reference/java/nio/BufferOverflowException.html
-http://developer.android.com/reference/java/nio/BufferUnderflowException.html
-http://developer.android.com/reference/java/util/ConcurrentModificationException.html
-http://developer.android.com/reference/java/util/EmptyStackException.html
-http://developer.android.com/reference/android/opengl/GLException.html
-http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSException.html
-http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoException.html
-http://developer.android.com/reference/java/util/MissingResourceException.html
-http://developer.android.com/reference/java/util/NoSuchElementException.html
-http://developer.android.com/reference/android/util/NoSuchPropertyException.html
-http://developer.android.com/reference/android/renderscript/RSRuntimeException.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/Executor.html
-http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
-http://developer.android.com/reference/android/database/StaleDataException.html
-http://developer.android.com/reference/android/util/TimeFormatException.html
-http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
-http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
-http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
-http://developer.android.com/reference/java/util/concurrent/CancellationException.html
-http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
-http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
-http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
-http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
-http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
-http://developer.android.com/reference/java/util/FormatterClosedException.html
-http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
-http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
-http://developer.android.com/reference/java/util/concurrent/FutureTask.html
-http://developer.android.com/reference/java/nio/channels/Selector.html
-http://developer.android.com/reference/java/nio/channels/SocketChannel.html
-http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
-http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
-http://developer.android.com/reference/java/util/IllegalFormatException.html
-http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
-http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
-http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
-http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
-http://developer.android.com/reference/java/util/InputMismatchException.html
-http://developer.android.com/reference/java/nio/InvalidMarkException.html
-http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
-http://developer.android.com/reference/java/util/MissingFormatWidthException.html
-http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
-http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
-http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
-http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
-http://developer.android.com/reference/java/util/regex/Pattern.html
-http://developer.android.com/reference/android/renderscript/RSDriverException.html
-http://developer.android.com/reference/android/renderscript/RSIllegalArgumentException.html
-http://developer.android.com/reference/android/renderscript/RSInvalidStateException.html
-http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
+http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteAccessPermException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException.html
@@ -2016,163 +2481,42 @@
http://developer.android.com/reference/android/database/sqlite/SQLiteOutOfMemoryException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteReadOnlyDatabaseException.html
http://developer.android.com/reference/android/database/sqlite/SQLiteTableLockedException.html
-http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
-http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
-http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
-http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
-http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
-http://developer.android.com/reference/java/util/Properties.html
-http://developer.android.com/reference/java/util/Dictionary.html
-http://developer.android.com/reference/java/util/Hashtable.html
-http://developer.android.com/reference/java/util/Map.Entry.html
-http://developer.android.com/reference/java/util/Map.html
-http://developer.android.com/reference/java/util/Collection.html
-http://developer.android.com/reference/java/io/Reader.html
-http://developer.android.com/reference/java/util/Enumeration.html
-http://developer.android.com/reference/java/io/OutputStream.html
-http://developer.android.com/reference/java/io/Writer.html
-http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
-http://developer.android.com/reference/android/text/Html.html
-http://developer.android.com/reference/android/text/TextUtils.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
-http://developer.android.com/reference/java/io/Console.html
-http://developer.android.com/reference/java/nio/channels/Channel.html
-http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
-http://developer.android.com/reference/android/telephony/CellLocation.html
-http://developer.android.com/reference/android/telephony/NeighboringCellInfo.html
-http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
-http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
-http://developer.android.com/reference/android/telephony/PhoneStateListener.html
-http://developer.android.com/reference/android/telephony/ServiceState.html
-http://developer.android.com/reference/android/telephony/SignalStrength.html
-http://developer.android.com/reference/android/telephony/SmsManager.html
-http://developer.android.com/reference/android/telephony/SmsMessage.html
-http://developer.android.com/reference/android/telephony/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/telephony/SmsMessage.MessageClass.html
-http://developer.android.com/shareables/training/ActivityLifecycle.zip
-http://developer.android.com/reference/android/media/RingtoneManager.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
-http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
-http://developer.android.com/reference/java/net/Socket.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
-http://developer.android.com/about/versions/android-1.5.html
-http://developer.android.com/about/versions/android-1.6.html
-http://developer.android.com/about/versions/android-2.1.html
-http://developer.android.com/about/versions/android-2.2.html
-http://developer.android.com/about/versions/android-2.3.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
-http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.html
-http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
-http://developer.android.com/reference/java/nio/charset/Charset.html
-http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
-http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
-http://developer.android.com/reference/java/nio/charset/CoderResult.html
-http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
-http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
-http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
-http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
-http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
-http://developer.android.com/reference/android/database/ContentObserver.html
-http://developer.android.com/reference/android/database/DataSetObserver.html
-http://developer.android.com/reference/android/support/v4/view/AccessibilityDelegateCompat.html
-http://developer.android.com/reference/android/support/v4/view/KeyEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html
-http://developer.android.com/reference/android/support/v4/view/MotionEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html
-http://developer.android.com/reference/android/support/v4/view/VelocityTrackerCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompatJB.html
-http://developer.android.com/reference/android/support/v4/view/ViewConfigurationCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewGroupCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.LayoutParams.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SavedState.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SimpleOnPageChangeListener.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/ComponentInfo.html
-http://developer.android.com/reference/android/content/pm/ConfigurationInfo.html
-http://developer.android.com/reference/android/content/pm/FeatureInfo.html
-http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
-http://developer.android.com/reference/android/content/pm/PackageInfo.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/PackageStats.html
-http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
-http://developer.android.com/reference/android/content/pm/PermissionInfo.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/Signature.html
-http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
-http://developer.android.com/reference/android/util/Printer.html
-http://developer.android.com/reference/android/content/res/XmlResourceParser.html
-http://developer.android.com/reference/android/speech/tts/SynthesisCallback.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnUtteranceCompletedListener.html
-http://developer.android.com/reference/android/speech/tts/SynthesisRequest.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.EngineInfo.html
-http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html
-http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateOvershootInterpolator.html
-http://developer.android.com/reference/android/view/animation/BounceInterpolator.html
-http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
-http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
-http://developer.android.com/reference/android/view/animation/OvershootInterpolator.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.OnPreferenceStartFragmentCallback.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
-http://developer.android.com/reference/android/preference/MultiSelectListPreference.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html
-http://developer.android.com/reference/android/preference/PreferenceGroup.html
-http://developer.android.com/reference/android/preference/RingtonePreference.html
-http://developer.android.com/reference/android/preference/SwitchPreference.html
-http://developer.android.com/reference/android/preference/TwoStatePreference.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_dialog.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_list.html
-http://developer.android.com/shareables/icon_templates-v4.0.zip
-http://developer.android.com/shareables/icon_templates-v2.3.zip
-http://developer.android.com/shareables/icon_templates-v2.0.zip
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_action_bar.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
+http://developer.android.com/reference/android/text/GetChars.html
+http://developer.android.com/reference/android/text/Html.ImageGetter.html
+http://developer.android.com/reference/android/text/Html.TagHandler.html
+http://developer.android.com/reference/android/text/NoCopySpan.html
+http://developer.android.com/reference/android/text/ParcelableSpan.html
+http://developer.android.com/reference/android/text/Spannable.html
+http://developer.android.com/reference/android/text/Spanned.html
+http://developer.android.com/reference/android/text/SpanWatcher.html
+http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
+http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
+http://developer.android.com/reference/android/text/AlteredCharSequence.html
+http://developer.android.com/reference/android/text/AndroidCharacter.html
+http://developer.android.com/reference/android/text/Annotation.html
+http://developer.android.com/reference/android/text/AutoText.html
+http://developer.android.com/reference/android/text/BoringLayout.html
+http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
+http://developer.android.com/reference/android/text/DynamicLayout.html
+http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
+http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
+http://developer.android.com/reference/android/text/Layout.Directions.html
+http://developer.android.com/reference/android/text/LoginFilter.html
+http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
+http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
+http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
+http://developer.android.com/reference/android/text/SpannableString.html
+http://developer.android.com/reference/android/text/SpannableStringBuilder.html
+http://developer.android.com/reference/android/text/SpannedString.html
+http://developer.android.com/reference/android/text/StaticLayout.html
+http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
+http://developer.android.com/reference/android/text/Layout.Alignment.html
http://developer.android.com/reference/java/io/DataInput.html
http://developer.android.com/reference/java/io/DataOutput.html
http://developer.android.com/reference/java/io/Externalizable.html
http://developer.android.com/reference/java/io/FileFilter.html
http://developer.android.com/reference/java/io/FilenameFilter.html
-http://developer.android.com/reference/java/io/Flushable.html
http://developer.android.com/reference/java/io/ObjectInput.html
http://developer.android.com/reference/java/io/ObjectInputValidation.html
http://developer.android.com/reference/java/io/ObjectOutput.html
@@ -2185,6 +2529,7 @@
http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
http://developer.android.com/reference/java/io/CharArrayReader.html
http://developer.android.com/reference/java/io/CharArrayWriter.html
+http://developer.android.com/reference/java/io/Console.html
http://developer.android.com/reference/java/io/DataInputStream.html
http://developer.android.com/reference/java/io/DataOutputStream.html
http://developer.android.com/reference/java/io/FilePermission.html
@@ -2211,12 +2556,14 @@
http://developer.android.com/reference/java/io/PushbackInputStream.html
http://developer.android.com/reference/java/io/PushbackReader.html
http://developer.android.com/reference/java/io/RandomAccessFile.html
+http://developer.android.com/reference/java/io/Reader.html
http://developer.android.com/reference/java/io/SequenceInputStream.html
http://developer.android.com/reference/java/io/SerializablePermission.html
http://developer.android.com/reference/java/io/StreamTokenizer.html
http://developer.android.com/reference/java/io/StringBufferInputStream.html
http://developer.android.com/reference/java/io/StringReader.html
http://developer.android.com/reference/java/io/StringWriter.html
+http://developer.android.com/reference/java/io/Writer.html
http://developer.android.com/reference/java/io/CharConversionException.html
http://developer.android.com/reference/java/io/EOFException.html
http://developer.android.com/reference/java/io/InterruptedIOException.html
@@ -2224,150 +2571,18 @@
http://developer.android.com/reference/java/io/InvalidObjectException.html
http://developer.android.com/reference/java/io/NotActiveException.html
http://developer.android.com/reference/java/io/NotSerializableException.html
+http://developer.android.com/reference/java/io/ObjectStreamException.html
http://developer.android.com/reference/java/io/OptionalDataException.html
http://developer.android.com/reference/java/io/StreamCorruptedException.html
http://developer.android.com/reference/java/io/SyncFailedException.html
-http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
http://developer.android.com/reference/java/io/UTFDataFormatException.html
http://developer.android.com/reference/java/io/WriteAbortedException.html
http://developer.android.com/reference/java/io/IOError.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
-http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
-http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/CorrectionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
-http://developer.android.com/reference/android/view/inputmethod/InputBinding.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnectionWrapper.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodInfo.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSubtype.html
-http://developer.android.com/reference/android/graphics/Color.html
-http://developer.android.com/reference/junit/framework/Assert.html
-http://developer.android.com/reference/junit/framework/TestResult.html
-http://developer.android.com/reference/junit/framework/Test.html
-http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
-http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
-http://developer.android.com/reference/java/util/Comparator.html
-http://developer.android.com/reference/java/util/Deque.html
-http://developer.android.com/reference/java/util/EventListener.html
-http://developer.android.com/reference/java/util/Formattable.html
-http://developer.android.com/reference/java/util/ListIterator.html
-http://developer.android.com/reference/java/util/NavigableMap.html
-http://developer.android.com/reference/java/util/NavigableSet.html
-http://developer.android.com/reference/java/util/Observer.html
-http://developer.android.com/reference/java/util/Queue.html
-http://developer.android.com/reference/java/util/RandomAccess.html
-http://developer.android.com/reference/java/util/SortedMap.html
-http://developer.android.com/reference/java/util/SortedSet.html
-http://developer.android.com/reference/java/util/AbstractCollection.html
-http://developer.android.com/reference/java/util/AbstractList.html
-http://developer.android.com/reference/java/util/AbstractMap.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleEntry.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleImmutableEntry.html
-http://developer.android.com/reference/java/util/AbstractQueue.html
-http://developer.android.com/reference/java/util/AbstractSequentialList.html
-http://developer.android.com/reference/java/util/AbstractSet.html
-http://developer.android.com/reference/java/util/ArrayDeque.html
-http://developer.android.com/reference/java/util/Arrays.html
-http://developer.android.com/reference/java/util/BitSet.html
-http://developer.android.com/reference/java/util/Calendar.html
-http://developer.android.com/reference/java/util/Collections.html
-http://developer.android.com/reference/java/util/Currency.html
-http://developer.android.com/reference/java/util/Date.html
-http://developer.android.com/reference/java/util/EnumMap.html
-http://developer.android.com/reference/java/util/EnumSet.html
-http://developer.android.com/reference/java/util/EventListenerProxy.html
-http://developer.android.com/reference/java/util/EventObject.html
-http://developer.android.com/reference/java/util/FormattableFlags.html
-http://developer.android.com/reference/java/util/GregorianCalendar.html
-http://developer.android.com/reference/java/util/HashMap.html
-http://developer.android.com/reference/java/util/HashSet.html
-http://developer.android.com/reference/java/util/IdentityHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashSet.html
-http://developer.android.com/reference/java/util/LinkedList.html
-http://developer.android.com/reference/java/util/ListResourceBundle.html
-http://developer.android.com/reference/java/util/Locale.html
-http://developer.android.com/reference/java/util/Observable.html
-http://developer.android.com/reference/java/util/PriorityQueue.html
-http://developer.android.com/reference/java/util/PropertyPermission.html
-http://developer.android.com/reference/java/util/PropertyResourceBundle.html
-http://developer.android.com/reference/java/util/Random.html
-http://developer.android.com/reference/java/util/ResourceBundle.html
-http://developer.android.com/reference/java/util/ResourceBundle.Control.html
-http://developer.android.com/reference/java/util/Scanner.html
-http://developer.android.com/reference/java/util/ServiceLoader.html
-http://developer.android.com/reference/java/util/SimpleTimeZone.html
-http://developer.android.com/reference/java/util/Stack.html
-http://developer.android.com/reference/java/util/StringTokenizer.html
-http://developer.android.com/reference/java/util/Timer.html
-http://developer.android.com/reference/java/util/TimerTask.html
-http://developer.android.com/reference/java/util/TimeZone.html
-http://developer.android.com/reference/java/util/TreeMap.html
-http://developer.android.com/reference/java/util/TreeSet.html
-http://developer.android.com/reference/java/util/UUID.html
-http://developer.android.com/reference/java/util/Vector.html
-http://developer.android.com/reference/java/util/WeakHashMap.html
-http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
-http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
-http://developer.android.com/reference/java/util/TooManyListenersException.html
-http://developer.android.com/reference/java/util/ServiceConfigurationError.html
-http://developer.android.com/reference/java/text/SimpleDateFormat.html
-http://developer.android.com/reference/java/text/DateFormat.html
-http://developer.android.com/reference/java/nio/channels/ByteChannel.html
-http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
-http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channels.html
-http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
-http://developer.android.com/reference/java/nio/channels/FileLock.html
-http://developer.android.com/reference/java/nio/channels/Pipe.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectionKey.html
-http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
-http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
-http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
-http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
-http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
-http://developer.android.com/reference/java/net/SocketAddress.html
-http://developer.android.com/reference/android/text/method/MovementMethod.html
-http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
-http://developer.android.com/reference/android/text/InputFilter.html
-http://developer.android.com/reference/android/content/res/ColorStateList.html
-http://developer.android.com/reference/android/text/method/KeyListener.html
-http://developer.android.com/reference/android/text/Layout.html
-http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
-http://developer.android.com/reference/android/text/TextPaint.html
-http://developer.android.com/reference/android/text/Selection.html
-http://developer.android.com/reference/android/text/method/TransformationMethod.html
-http://developer.android.com/reference/android/graphics/Typeface.html
-http://developer.android.com/reference/android/text/style/URLSpan.html
-http://developer.android.com/reference/android/text/util/Linkify.html
-http://developer.android.com/reference/android/text/Editable.Factory.html
-http://developer.android.com/reference/android/text/Spannable.Factory.html
+http://developer.android.com/reference/java/nio/CharBuffer.html
+http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.html
+http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
+http://developer.android.com/reference/android/database/DataSetObserver.html
+http://developer.android.com/reference/android/preference/Preference.html
http://developer.android.com/reference/android/graphics/drawable/Animatable.html
http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
@@ -2384,6 +2599,7 @@
http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
+http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
@@ -2391,121 +2607,40 @@
http://developer.android.com/reference/android/appwidget/AppWidgetHostView.html
http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html
http://developer.android.com/reference/android/gesture/GestureOverlayView.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html
http://developer.android.com/reference/android/inputmethodservice/Keyboard.html
+http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html
+http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html
http://developer.android.com/reference/android/renderscript/RSSurfaceView.html
+http://developer.android.com/guide/topics/graphics/renderscript.html
http://developer.android.com/reference/android/renderscript/RSTextureView.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorActivity.html
-http://developer.android.com/reference/android/support/v13/dreams/BasicDream.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminInfo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
-http://developer.android.com/resources/samples/get.html
-http://developer.android.com/guide/appendix/g-app-intents.html
-http://developer.android.com/resources/samples/index.html
-http://developer.android.com/resources/samples/NotePad/index.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
-http://developer.android.com/reference/android/test/mock/MockContentResolver.html
-http://developer.android.com/shareables/training/LocationAware.zip
-http://developer.android.com/reference/android/location/LocationProvider.html
-http://developer.android.com/reference/android/R.style.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
-http://developer.android.com/reference/android/content/res/ObbInfo.html
-http://developer.android.com/reference/android/content/res/ObbScanner.html
-http://developer.android.com/reference/java/security/spec/KeySpec.html
-http://developer.android.com/reference/javax/crypto/SecretKey.html
-http://developer.android.com/reference/junit/framework/Protectable.html
-http://developer.android.com/reference/junit/framework/TestListener.html
-http://developer.android.com/reference/junit/framework/TestFailure.html
-http://developer.android.com/reference/junit/framework/AssertionFailedError.html
-http://developer.android.com/reference/junit/framework/ComparisonFailure.html
+http://developer.android.com/reference/android/appwidget/AppWidgetHost.html
+http://developer.android.com/reference/javax/xml/XMLConstants.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.PageTransformer.html
+http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
+http://developer.android.com/reference/android/support/v4/view/GestureDetectorCompat.html
+http://developer.android.com/reference/android/support/v4/util/AtomicFile.html
+http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
+http://developer.android.com/reference/android/support/v4/util/LruCache.html
+http://developer.android.com/reference/android/support/v4/net/ConnectivityManagerCompat.html
+http://developer.android.com/reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html
+http://developer.android.com/reference/android/support/v4/view/ViewGroupCompat.html
+http://developer.android.com/reference/android/support/v4/view/MenuCompat.html
+http://developer.android.com/resources/samples/Support4Demos/index.html
+http://developer.android.com/resources/samples/Support13Demos/index.html
+http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/HttpResponse.html
+http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
+http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMLocator.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMResult.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMSource.html
-http://developer.android.com/reference/javax/xml/transform/TransformerException.html
-http://developer.android.com/reference/javax/xml/transform/SourceLocator.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
-http://developer.android.com/reference/java/math/BigInteger.html
-http://developer.android.com/shareables/app_widget_templates-v4.0.zip
-http://developer.android.com/resources/tutorials/views/hello-formstuff.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLContextFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLWindowSurfaceFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
-http://developer.android.com/reference/android/opengl/ETC1.html
-http://developer.android.com/reference/android/opengl/ETC1Util.html
-http://developer.android.com/reference/android/opengl/ETC1Util.ETC1Texture.html
-http://developer.android.com/reference/android/opengl/GLDebugHelper.html
-http://developer.android.com/reference/android/opengl/GLES10.html
-http://developer.android.com/reference/android/opengl/GLES10Ext.html
-http://developer.android.com/reference/android/opengl/GLES11.html
-http://developer.android.com/reference/android/opengl/GLES11Ext.html
-http://developer.android.com/reference/android/opengl/GLU.html
-http://developer.android.com/reference/android/opengl/GLUtils.html
-http://developer.android.com/reference/android/opengl/Matrix.html
-http://developer.android.com/reference/android/opengl/Visibility.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
-http://developer.android.com/reference/android/test/mock/MockContext.html
-http://developer.android.com/shareables/training/FragmentBasics.zip
-http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
-http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
-http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
-http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
-http://developer.android.com/reference/android/view/animation/Animation.Description.html
-http://developer.android.com/reference/android/view/animation/AnimationSet.html
-http://developer.android.com/reference/android/view/animation/AnimationUtils.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/RotateAnimation.html
-http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
-http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.Field.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeFactory.html
-http://developer.android.com/reference/javax/xml/datatype/Duration.html
-http://developer.android.com/reference/javax/xml/datatype/XMLGregorianCalendar.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConfigurationException.html
-http://developer.android.com/resources/samples/MultiResolution/index.html
-http://developer.android.com/guide/practices/screens-support-1.5.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.html
-http://developer.android.com/reference/android/util/DisplayMetrics.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.html
-http://developer.android.com/resources/dashboard/screens.html
-http://developer.android.com/reference/java/sql/Connection.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html
-http://developer.android.com/guide/topics/network/sip.html
http://developer.android.com/reference/android/graphics/SurfaceTexture.OnFrameAvailableListener.html
http://developer.android.com/reference/android/graphics/AvoidXfermode.html
http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
http://developer.android.com/reference/android/graphics/BitmapShader.html
http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
http://developer.android.com/reference/android/graphics/Camera.html
+http://developer.android.com/reference/android/graphics/Color.html
http://developer.android.com/reference/android/graphics/ColorMatrix.html
http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
http://developer.android.com/reference/android/graphics/ComposePathEffect.html
@@ -2522,10 +2657,10 @@
http://developer.android.com/reference/android/graphics/LinearGradient.html
http://developer.android.com/reference/android/graphics/MaskFilter.html
http://developer.android.com/reference/android/graphics/Movie.html
-http://developer.android.com/reference/android/graphics/NinePatch.html
http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
+http://developer.android.com/reference/android/graphics/Path.html
http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
http://developer.android.com/reference/android/graphics/PathEffect.html
http://developer.android.com/reference/android/graphics/PathMeasure.html
@@ -2564,410 +2699,269 @@
http://developer.android.com/reference/android/graphics/Region.Op.html
http://developer.android.com/reference/android/graphics/Shader.TileMode.html
http://developer.android.com/reference/android/graphics/SurfaceTexture.OutOfResourcesException.html
-http://developer.android.com/reference/android/media/MediaPlayer.html
-http://developer.android.com/reference/android/media/MediaRecorder.html
-http://developer.android.com/reference/android/media/CamcorderProfile.html
-http://developer.android.com/reference/android/renderscript/Allocation.MipmapControl.html
-http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
-http://developer.android.com/reference/java/sql/ClientInfoStatus.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.MessageLevel.html
-http://developer.android.com/reference/android/database/CursorJoiner.Result.html
-http://developer.android.com/reference/android/renderscript/Element.DataKind.html
-http://developer.android.com/reference/android/renderscript/Element.DataType.html
-http://developer.android.com/reference/java/lang/annotation/ElementType.html
-http://developer.android.com/reference/android/renderscript/FileA3D.EntryType.html
-http://developer.android.com/reference/android/renderscript/Font.Style.html
-http://developer.android.com/reference/android/util/JsonToken.html
-http://developer.android.com/reference/android/text/Layout.Alignment.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
-http://developer.android.com/reference/android/renderscript/Mesh.Primitive.html
-http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
-http://developer.android.com/reference/android/net/NetworkInfo.State.html
-http://developer.android.com/reference/java/text/Normalizer.Form.html
-http://developer.android.com/reference/android/renderscript/Program.TextureType.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.CullMode.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendDstFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendSrcFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.DepthFunc.html
-http://developer.android.com/reference/java/net/Proxy.Type.html
-http://developer.android.com/reference/android/renderscript/RenderScript.Priority.html
-http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
-http://developer.android.com/reference/java/math/RoundingMode.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
-http://developer.android.com/reference/java/sql/RowIdLifetime.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
-http://developer.android.com/reference/android/renderscript/Sampler.Value.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
-http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
-http://developer.android.com/reference/android/renderscript/Type.CubemapFace.html
-http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
-http://developer.android.com/reference/android/webkit/WebSettings.PluginState.html
-http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
-http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
-http://developer.android.com/reference/android/webkit/WebSettings.html
-http://developer.android.com/reference/android/webkit/WebSettings.ZoomDensity.html
-http://developer.android.com/reference/android/util/Xml.Encoding.html
-http://developer.android.com/reference/java/security/cert/CertPath.html
-http://developer.android.com/sdk/api_diff/10/changes.html
-http://developer.android.com/reference/android/nfc/NdefRecord.html
-http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
-http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
-http://developer.android.com/reference/android/speech/RecognizerResultsIntent.html
-http://developer.android.com/reference/android/test/UiThreadTest.html
-http://developer.android.com/shareables/training/TabCompat.zip
-http://developer.android.com/reference/junit/runner/BaseTestRunner.html
-http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
-http://developer.android.com/reference/javax/xml/transform/ErrorListener.html
-http://developer.android.com/reference/javax/xml/transform/Result.html
-http://developer.android.com/reference/javax/xml/transform/Templates.html
-http://developer.android.com/reference/javax/xml/transform/URIResolver.html
-http://developer.android.com/reference/javax/xml/transform/OutputKeys.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactory.html
-http://developer.android.com/reference/javax/xml/transform/TransformerConfigurationException.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactoryConfigurationError.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXSource.html
-http://developer.android.com/reference/javax/xml/transform/stream/StreamSource.html
-http://developer.android.com/resources/samples/ContactManager/index.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
-http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
-http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
-http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
-http://developer.android.com/reference/java/util/jar/Attributes.html
-http://developer.android.com/reference/java/util/jar/Attributes.Name.html
-http://developer.android.com/reference/java/util/jar/JarEntry.html
-http://developer.android.com/reference/java/util/jar/JarFile.html
-http://developer.android.com/reference/java/util/jar/JarInputStream.html
-http://developer.android.com/reference/java/util/jar/JarOutputStream.html
-http://developer.android.com/reference/java/util/jar/Manifest.html
-http://developer.android.com/reference/java/util/jar/Pack200.html
-http://developer.android.com/reference/java/util/jar/JarException.html
-http://developer.android.com/reference/java/sql/PreparedStatement.html
-http://developer.android.com/reference/android/net/Uri.Builder.html
-http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
-http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
-http://developer.android.com/reference/android/webkit/SslErrorHandler.html
+http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
+http://developer.android.com/reference/java/util/regex/MatchResult.html
+http://developer.android.com/reference/java/util/regex/Matcher.html
+http://developer.android.com/reference/java/security/Permission.html
+http://developer.android.com/reference/java/security/PermissionCollection.html
+http://developer.android.com/reference/java/security/Guard.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
+http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLContextFactory.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLWindowSurfaceFactory.html
+http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
+http://developer.android.com/reference/android/opengl/EGL14.html
+http://developer.android.com/reference/android/opengl/EGLConfig.html
+http://developer.android.com/reference/android/opengl/EGLContext.html
+http://developer.android.com/reference/android/opengl/EGLDisplay.html
+http://developer.android.com/reference/android/opengl/EGLObjectHandle.html
+http://developer.android.com/reference/android/opengl/EGLSurface.html
+http://developer.android.com/reference/android/opengl/ETC1.html
+http://developer.android.com/reference/android/opengl/ETC1Util.html
+http://developer.android.com/reference/android/opengl/ETC1Util.ETC1Texture.html
+http://developer.android.com/reference/android/opengl/GLDebugHelper.html
+http://developer.android.com/reference/android/opengl/GLES10.html
+http://developer.android.com/reference/android/opengl/GLES10Ext.html
+http://developer.android.com/reference/android/opengl/GLES11.html
+http://developer.android.com/reference/android/opengl/GLES11Ext.html
+http://developer.android.com/reference/android/opengl/GLES20.html
+http://developer.android.com/reference/android/opengl/GLU.html
+http://developer.android.com/reference/android/opengl/GLUtils.html
+http://developer.android.com/reference/android/opengl/Visibility.html
+http://developer.android.com/reference/android/opengl/GLException.html
+http://developer.android.com/reference/java/security/cert/Certificate.html
+http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
+http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
+http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
-http://developer.android.com/reference/android/util/TypedValue.html
-http://developer.android.com/reference/android/hardware/Camera.html
-http://developer.android.com/reference/java/lang/annotation/Annotation.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
-http://developer.android.com/resources/samples/SoftKeyboard/index.html
-http://developer.android.com/reference/android/text/InputType.html
-http://developer.android.com/reference/android/test/mock/MockCursor.html
-http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
-http://developer.android.com/reference/android/test/mock/MockPackageManager.html
-http://developer.android.com/reference/android/test/mock/MockResources.html
+http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
+http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
+http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
+http://developer.android.com/reference/java/nio/channels/Pipe.html
+http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
http://developer.android.com/reference/android/database/CrossProcessCursor.html
http://developer.android.com/reference/android/database/AbstractCursor.html
http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
http://developer.android.com/reference/android/database/CharArrayBuffer.html
http://developer.android.com/reference/android/database/ContentObservable.html
+http://developer.android.com/reference/android/database/ContentObserver.html
http://developer.android.com/reference/android/database/CrossProcessCursorWrapper.html
http://developer.android.com/reference/android/database/CursorJoiner.html
http://developer.android.com/reference/android/database/CursorWindow.html
http://developer.android.com/reference/android/database/CursorWrapper.html
+http://developer.android.com/reference/android/database/DatabaseUtils.html
http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
http://developer.android.com/reference/android/database/DataSetObservable.html
http://developer.android.com/reference/android/database/DefaultDatabaseErrorHandler.html
-http://developer.android.com/reference/android/database/MatrixCursor.html
http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
http://developer.android.com/reference/android/database/MergeCursor.html
http://developer.android.com/reference/android/database/Observable.html
-http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
-http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
-http://developer.android.com/reference/android/text/method/BaseKeyListener.html
-http://developer.android.com/reference/android/text/method/BaseMovementMethod.html
-http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
-http://developer.android.com/reference/android/text/method/DateKeyListener.html
-http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
-http://developer.android.com/reference/android/text/method/DialerKeyListener.html
-http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
-http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
-http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
-http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
-http://developer.android.com/reference/android/text/method/NumberKeyListener.html
-http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
-http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
-http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
-http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
-http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.html
-http://developer.android.com/reference/android/text/method/TimeKeyListener.html
-http://developer.android.com/reference/android/text/method/Touch.html
-http://developer.android.com/reference/android/text/Spannable.html
-http://developer.android.com/reference/junit/runner/Version.html
-http://developer.android.com/reference/android/media/SoundPool.html
-http://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html
-http://developer.android.com/reference/java/nio/CharBuffer.html
-http://developer.android.com/shareables/training/NewsReader.zip
-http://developer.android.com/reference/javax/security/auth/callback/Callback.html
-http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
-http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
-http://developer.android.com/reference/android/webkit/DownloadListener.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.Callback.html
-http://developer.android.com/reference/android/webkit/PluginStub.html
-http://developer.android.com/reference/android/webkit/ValueCallback.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.CustomViewCallback.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
-http://developer.android.com/reference/android/webkit/WebStorage.QuotaUpdater.html
-http://developer.android.com/reference/android/webkit/WebView.FindListener.html
-http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
-http://developer.android.com/reference/android/webkit/CacheManager.html
-http://developer.android.com/reference/android/webkit/CacheManager.CacheResult.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.html
-http://developer.android.com/reference/android/webkit/CookieManager.html
-http://developer.android.com/reference/android/webkit/CookieSyncManager.html
-http://developer.android.com/reference/android/webkit/DateSorter.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.html
-http://developer.android.com/reference/android/webkit/JsPromptResult.html
-http://developer.android.com/reference/android/webkit/JsResult.html
-http://developer.android.com/reference/android/webkit/MimeTypeMap.html
-http://developer.android.com/reference/android/webkit/URLUtil.html
-http://developer.android.com/reference/android/webkit/WebBackForwardList.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.html
-http://developer.android.com/reference/android/webkit/WebHistoryItem.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.html
-http://developer.android.com/reference/android/webkit/WebResourceResponse.html
-http://developer.android.com/reference/android/webkit/WebStorage.html
-http://developer.android.com/reference/android/webkit/WebStorage.Origin.html
-http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
-http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
-http://developer.android.com/reference/android/webkit/WebViewClient.html
-http://developer.android.com/reference/android/webkit/WebViewDatabase.html
-http://developer.android.com/reference/android/webkit/WebViewFragment.html
-http://developer.android.com/guide/developing/debug-tasks.html
-http://developer.android.com/reference/android/net/http/SslCertificate.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
-http://developer.android.com/reference/java/security/spec/ECField.html
-http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
-http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
-http://developer.android.com/reference/java/security/spec/ECFieldFp.html
-http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECPoint.html
-http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/EllipticCurve.html
-http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
-http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
-http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
-http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
-http://developer.android.com/reference/org/apache/http/auth/Credentials.html
-http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.Insets.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Key.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Row.html
-http://developer.android.com/reference/android/R.id.html
-http://developer.android.com/reference/java/sql/Array.html
-http://developer.android.com/reference/java/sql/Blob.html
-http://developer.android.com/reference/java/sql/CallableStatement.html
-http://developer.android.com/reference/java/sql/Clob.html
-http://developer.android.com/reference/java/sql/DatabaseMetaData.html
-http://developer.android.com/reference/java/sql/Driver.html
-http://developer.android.com/reference/java/sql/NClob.html
-http://developer.android.com/reference/java/sql/ParameterMetaData.html
-http://developer.android.com/reference/java/sql/Ref.html
-http://developer.android.com/reference/java/sql/ResultSet.html
-http://developer.android.com/reference/java/sql/RowId.html
-http://developer.android.com/reference/java/sql/Savepoint.html
-http://developer.android.com/reference/java/sql/SQLData.html
-http://developer.android.com/reference/java/sql/SQLInput.html
-http://developer.android.com/reference/java/sql/SQLOutput.html
-http://developer.android.com/reference/java/sql/SQLXML.html
-http://developer.android.com/reference/java/sql/Statement.html
-http://developer.android.com/reference/java/sql/Struct.html
-http://developer.android.com/reference/java/sql/Date.html
-http://developer.android.com/reference/java/sql/DriverManager.html
-http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
-http://developer.android.com/reference/java/sql/SQLPermission.html
+http://developer.android.com/reference/android/database/CursorJoiner.Result.html
+http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
+http://developer.android.com/reference/android/database/SQLException.html
+http://developer.android.com/reference/android/database/StaleDataException.html
+http://developer.android.com/reference/android/renderscript/ScriptC.html
+http://developer.android.com/reference/android/renderscript/Script.FieldBase.html
+http://developer.android.com/reference/renderscript/rs__core_8rsh.html
+http://developer.android.com/reference/android/renderscript/Allocation.html
+http://developer.android.com/reference/android/renderscript/Element.html
+http://developer.android.com/reference/android/renderscript/Type.html
+http://developer.android.com/reference/android/net/wifi/ScanResult.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
+http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
+http://developer.android.com/reference/android/net/wifi/WifiInfo.html
+http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
+http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
+http://developer.android.com/reference/android/net/wifi/WpsInfo.html
+http://developer.android.com/reference/android/net/wifi/SupplicantState.html
+http://developer.android.com/reference/android/net/NetworkInfo.html
+http://developer.android.com/reference/android/net/DhcpInfo.html
+http://developer.android.com/reference/org/xml/sax/AttributeList.html
+http://developer.android.com/reference/org/xml/sax/Attributes.html
+http://developer.android.com/reference/org/xml/sax/ContentHandler.html
+http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
+http://developer.android.com/reference/org/xml/sax/DTDHandler.html
+http://developer.android.com/reference/org/xml/sax/EntityResolver.html
+http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
+http://developer.android.com/reference/org/xml/sax/Locator.html
+http://developer.android.com/reference/org/xml/sax/Parser.html
+http://developer.android.com/reference/org/xml/sax/XMLFilter.html
+http://developer.android.com/reference/org/xml/sax/XMLReader.html
+http://developer.android.com/reference/org/xml/sax/HandlerBase.html
+http://developer.android.com/reference/org/xml/sax/InputSource.html
+http://developer.android.com/reference/org/xml/sax/SAXException.html
+http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
+http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
+http://developer.android.com/reference/org/xml/sax/SAXParseException.html
+http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
+http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
+http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
+http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
+http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
+http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
+http://developer.android.com/reference/org/apache/http/ProtocolException.html
+http://developer.android.com/reference/java/security/acl/AclEntry.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
+http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
+http://developer.android.com/reference/java/util/jar/Attributes.html
+http://developer.android.com/reference/java/security/AuthProvider.html
+http://developer.android.com/reference/java/text/CharacterIterator.html
+http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
+http://developer.android.com/reference/java/text/BreakIterator.html
+http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
+http://developer.android.com/reference/java/security/cert/CRLSelector.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
+http://developer.android.com/reference/java/security/cert/CertPathParameters.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
+http://developer.android.com/reference/java/security/cert/CertSelector.html
+http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
+http://developer.android.com/reference/java/text/ChoiceFormat.html
+http://developer.android.com/reference/java/text/Collator.html
+http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
+http://developer.android.com/reference/java/text/DateFormat.html
+http://developer.android.com/reference/java/text/DateFormatSymbols.html
+http://developer.android.com/reference/java/text/DecimalFormat.html
+http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
+http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
+http://developer.android.com/reference/java/text/Format.html
+http://developer.android.com/reference/java/net/HttpCookie.html
+http://developer.android.com/reference/org/apache/http/HttpHost.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
+http://developer.android.com/reference/org/apache/http/HttpVersion.html
+http://developer.android.com/reference/java/util/jar/JarEntry.html
+http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
+http://developer.android.com/reference/android/support/v4/util/LongSparseArray.html
+http://developer.android.com/reference/java/util/jar/Manifest.html
+http://developer.android.com/reference/java/text/MessageFormat.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
+http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
+http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
+http://developer.android.com/reference/java/security/cert/PKIXParameters.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
+http://developer.android.com/reference/java/text/RuleBasedCollator.html
+http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
+http://developer.android.com/reference/java/text/SimpleDateFormat.html
+http://developer.android.com/reference/android/net/sip/SipProfile.html
+http://developer.android.com/reference/java/text/StringCharacterIterator.html
+http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
http://developer.android.com/reference/java/sql/Time.html
http://developer.android.com/reference/java/sql/Timestamp.html
-http://developer.android.com/reference/java/sql/Types.html
-http://developer.android.com/reference/java/sql/BatchUpdateException.html
-http://developer.android.com/reference/java/sql/DataTruncation.html
-http://developer.android.com/reference/java/sql/SQLClientInfoException.html
-http://developer.android.com/reference/java/sql/SQLDataException.html
-http://developer.android.com/reference/java/sql/SQLFeatureNotSupportedException.html
-http://developer.android.com/reference/java/sql/SQLIntegrityConstraintViolationException.html
-http://developer.android.com/reference/java/sql/SQLInvalidAuthorizationSpecException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientException.html
-http://developer.android.com/reference/java/sql/SQLRecoverableException.html
-http://developer.android.com/reference/java/sql/SQLSyntaxErrorException.html
-http://developer.android.com/reference/java/sql/SQLTimeoutException.html
-http://developer.android.com/reference/java/sql/SQLTransactionRollbackException.html
-http://developer.android.com/reference/java/sql/SQLTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLTransientException.html
-http://developer.android.com/reference/java/sql/SQLWarning.html
-http://developer.android.com/sdk/win-usb.html
-http://developer.android.com/reference/java/net/ContentHandlerFactory.html
-http://developer.android.com/reference/java/net/CookiePolicy.html
-http://developer.android.com/reference/java/net/CookieStore.html
-http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
-http://developer.android.com/reference/java/net/FileNameMap.html
-http://developer.android.com/reference/java/net/SocketImplFactory.html
-http://developer.android.com/reference/java/net/SocketOptions.html
-http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
-http://developer.android.com/reference/java/net/Authenticator.html
-http://developer.android.com/reference/java/net/CacheRequest.html
-http://developer.android.com/reference/java/net/CacheResponse.html
-http://developer.android.com/reference/java/net/ContentHandler.html
-http://developer.android.com/reference/java/net/CookieHandler.html
-http://developer.android.com/reference/java/net/CookieManager.html
-http://developer.android.com/reference/java/net/DatagramPacket.html
-http://developer.android.com/reference/java/net/DatagramSocket.html
-http://developer.android.com/reference/java/net/DatagramSocketImpl.html
-http://developer.android.com/reference/java/net/HttpCookie.html
-http://developer.android.com/reference/java/net/HttpURLConnection.html
-http://developer.android.com/reference/java/net/IDN.html
-http://developer.android.com/reference/java/net/Inet4Address.html
-http://developer.android.com/reference/java/net/Inet6Address.html
-http://developer.android.com/reference/java/net/InetSocketAddress.html
-http://developer.android.com/reference/java/net/InterfaceAddress.html
-http://developer.android.com/reference/java/net/JarURLConnection.html
-http://developer.android.com/reference/java/net/MulticastSocket.html
-http://developer.android.com/reference/java/net/NetPermission.html
-http://developer.android.com/reference/java/net/NetworkInterface.html
-http://developer.android.com/reference/java/net/PasswordAuthentication.html
-http://developer.android.com/reference/java/net/Proxy.html
-http://developer.android.com/reference/java/net/ProxySelector.html
-http://developer.android.com/reference/java/net/ResponseCache.html
-http://developer.android.com/reference/java/net/SecureCacheResponse.html
-http://developer.android.com/reference/java/net/ServerSocket.html
-http://developer.android.com/reference/java/net/SocketImpl.html
-http://developer.android.com/reference/java/net/SocketPermission.html
-http://developer.android.com/reference/java/net/URI.html
-http://developer.android.com/reference/java/net/URL.html
-http://developer.android.com/reference/java/net/URLClassLoader.html
-http://developer.android.com/reference/java/net/URLDecoder.html
-http://developer.android.com/reference/java/net/URLEncoder.html
-http://developer.android.com/reference/java/net/URLStreamHandler.html
-http://developer.android.com/reference/java/net/BindException.html
-http://developer.android.com/reference/java/net/ConnectException.html
-http://developer.android.com/reference/java/net/HttpRetryException.html
-http://developer.android.com/reference/java/net/MalformedURLException.html
-http://developer.android.com/reference/java/net/NoRouteToHostException.html
-http://developer.android.com/reference/java/net/PortUnreachableException.html
-http://developer.android.com/reference/java/net/ProtocolException.html
-http://developer.android.com/reference/java/net/SocketException.html
-http://developer.android.com/reference/java/net/SocketTimeoutException.html
-http://developer.android.com/reference/java/net/UnknownHostException.html
-http://developer.android.com/reference/java/net/UnknownServiceException.html
-http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
-http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
-http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
-http://developer.android.com/reference/org/xml/sax/XMLReader.html
-http://developer.android.com/reference/java/nio/Buffer.html
-http://developer.android.com/reference/java/nio/ByteOrder.html
-http://developer.android.com/reference/java/nio/DoubleBuffer.html
-http://developer.android.com/reference/java/nio/FloatBuffer.html
-http://developer.android.com/reference/java/nio/IntBuffer.html
-http://developer.android.com/reference/java/nio/LongBuffer.html
-http://developer.android.com/reference/java/nio/MappedByteBuffer.html
-http://developer.android.com/reference/java/nio/ShortBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
-http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
-http://developer.android.com/reference/android/util/AndroidException.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
-http://developer.android.com/reference/android/location/GpsStatus.Listener.html
-http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html
-http://developer.android.com/reference/android/location/LocationListener.html
-http://developer.android.com/reference/android/location/Address.html
-http://developer.android.com/reference/android/location/Criteria.html
-http://developer.android.com/reference/android/location/Geocoder.html
-http://developer.android.com/reference/android/location/GpsSatellite.html
-http://developer.android.com/reference/android/location/GpsStatus.html
-http://developer.android.com/reference/android/location/Location.html
-http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
-http://developer.android.com/reference/java/security/acl/Group.html
-http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
-http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
-http://developer.android.com/reference/android/hardware/Camera.Parameters.html
-http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoSource.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoEncoder.html
-http://developer.android.com/reference/android/hardware/Camera.Area.html
+http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
+http://developer.android.com/reference/android/webkit/WebBackForwardList.html
+http://developer.android.com/reference/android/webkit/WebHistoryItem.html
+http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
+http://developer.android.com/reference/java/security/cert/X509CertSelector.html
+http://developer.android.com/reference/java/util/zip/ZipEntry.html
+http://developer.android.com/reference/junit/framework/TestResult.html
+http://developer.android.com/reference/junit/framework/Test.html
+http://developer.android.com/reference/java/nio/channels/ByteChannel.html
+http://developer.android.com/reference/java/nio/channels/Channel.html
+http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
+http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
+http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
+http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
+http://developer.android.com/reference/java/nio/channels/Channels.html
+http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
+http://developer.android.com/reference/java/nio/channels/FileLock.html
+http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
+http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
+http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
+http://developer.android.com/reference/java/nio/channels/SelectionKey.html
+http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
+http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
+http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
+http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
+http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
+http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
+http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
+http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
+http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
+http://developer.android.com/reference/org/apache/http/cookie/SM.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
+http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
+http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
+http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
+http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
+http://developer.android.com/reference/java/util/zip/DeflaterInputStream.html
+http://developer.android.com/reference/java/security/DigestInputStream.html
+http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
+http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
+http://developer.android.com/reference/java/util/jar/JarInputStream.html
+http://developer.android.com/reference/java/util/zip/ZipInputStream.html
+http://developer.android.com/reference/android/support/v4/util/SparseArrayCompat.html
+http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
+http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
+http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
+http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
+http://developer.android.com/sdk/tools-notes.html
+http://developer.android.com/resources/samples/TicTacToeLib/AndroidManifest.html
+http://developer.android.com/resources/samples/TicTacToeMain/AndroidManifest.html
+http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
+http://developer.android.com/guide/topics/fundamentals/services.html
+http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
+http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
+http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
+http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
+http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
+http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
+http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
+http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
+http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.Channel.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.PeerListListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ConnectionInfoListener.html
+http://developer.android.com/reference/java/lang/ref/WeakReference.html
+http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html
+http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
+http://developer.android.com/reference/org/apache/http/NameValuePair.html
+http://developer.android.com/reference/org/apache/http/HttpEntity.html
+http://developer.android.com/reference/java/security/Principal.html
+http://developer.android.com/guide/practices/performance.html
+http://developer.android.com/guide/practices/seamlessness.html
+http://developer.android.com/tools/help/ddms.html
+http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
+http://developer.android.com/reference/org/apache/http/StatusLine.html
+http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
+http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
+http://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback.html
+http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
http://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener.html
-http://developer.android.com/sdk/api_diff/15/changes.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.html
-http://developer.android.com/reference/android/view/textservice/SuggestionsInfo.html
-http://developer.android.com/reference/android/text/style/SuggestionSpan.html
-http://developer.android.com/reference/java/lang/annotation/Target.html
-http://developer.android.com/resources/faq/troubleshooting.html
+http://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener.html
+http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
+http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
+http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
+http://developer.android.com/reference/android/hardware/Camera.html
+http://developer.android.com/reference/android/hardware/Camera.Area.html
+http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html
+http://developer.android.com/reference/android/hardware/Camera.Face.html
+http://developer.android.com/reference/android/hardware/Camera.Parameters.html
+http://developer.android.com/reference/android/hardware/Camera.Size.html
+http://developer.android.com/reference/android/hardware/GeomagneticField.html
http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/client/CookieStore.html
http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
+http://developer.android.com/reference/org/apache/http/client/HttpClient.html
http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
@@ -2978,18 +2972,541 @@
http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
http://developer.android.com/reference/org/apache/http/client/RedirectException.html
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
-http://developer.android.com/reference/android/net/http/AndroidHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/ClockBackService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/TaskBackService.html
-http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
-http://developer.android.com/reference/dalvik/bytecode/OpcodeInfo.html
-http://developer.android.com/reference/android/text/Spanned.html
-http://developer.android.com/resources/faq/index.html
-http://developer.android.com/reference/android/renderscript/Allocation.html
+http://developer.android.com/reference/java/sql/Date.html
+http://developer.android.com/reference/java/util/zip/Checksum.html
+http://developer.android.com/reference/java/util/zip/Adler32.html
+http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
+http://developer.android.com/reference/java/util/zip/CRC32.html
+http://developer.android.com/reference/java/util/zip/Deflater.html
+http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
+http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
+http://developer.android.com/reference/java/util/zip/Inflater.html
+http://developer.android.com/reference/java/util/zip/InflaterOutputStream.html
+http://developer.android.com/reference/java/util/zip/ZipFile.html
+http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
+http://developer.android.com/reference/java/util/zip/DataFormatException.html
+http://developer.android.com/reference/java/util/zip/ZipException.html
+http://developer.android.com/reference/java/util/zip/ZipError.html
+http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
+http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
+http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
+http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
+http://developer.android.com/reference/android/text/util/Rfc822Token.html
+http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
+http://developer.android.com/reference/java/nio/Buffer.html
+http://developer.android.com/reference/java/nio/FloatBuffer.html
+http://developer.android.com/reference/java/nio/IntBuffer.html
+http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
+http://developer.android.com/reference/android/bluetooth/BluetoothProfile.html
+http://developer.android.com/reference/android/bluetooth/BluetoothProfile.ServiceListener.html
+http://developer.android.com/reference/android/bluetooth/BluetoothA2dp.html
+http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
+http://developer.android.com/reference/android/bluetooth/BluetoothAssignedNumbers.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html
+http://developer.android.com/reference/android/bluetooth/BluetoothClass.Service.html
+http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html
+http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html
+http://developer.android.com/reference/android/bluetooth/BluetoothHealth.html
+http://developer.android.com/reference/android/bluetooth/BluetoothHealthAppConfiguration.html
+http://developer.android.com/reference/android/bluetooth/BluetoothHealthCallback.html
+http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html
+http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
+http://developer.android.com/reference/java/security/cert/PolicyNode.html
+http://developer.android.com/reference/java/security/cert/X509Extension.html
+http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
+http://developer.android.com/reference/java/security/cert/CertificateFactory.html
+http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
+http://developer.android.com/reference/java/security/cert/CertPath.html
+http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
+http://developer.android.com/reference/java/security/cert/CertPathValidator.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
+http://developer.android.com/reference/java/security/cert/CertStore.html
+http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
+http://developer.android.com/reference/java/security/cert/CRL.html
+http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
+http://developer.android.com/reference/java/security/cert/TrustAnchor.html
+http://developer.android.com/reference/java/security/cert/X509Certificate.html
+http://developer.android.com/reference/java/security/cert/X509CRL.html
+http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
+http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
+http://developer.android.com/reference/java/security/cert/CertificateException.html
+http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
+http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
+http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
+http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
+http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
+http://developer.android.com/reference/java/security/cert/CertStoreException.html
+http://developer.android.com/reference/java/security/cert/CRLException.html
+http://developer.android.com/reference/java/security/KeyStore.html
+http://developer.android.com/reference/java/security/KeyStoreException.html
+http://developer.android.com/reference/java/security/InvalidParameterException.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
+http://developer.android.com/reference/java/net/SocketTimeoutException.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
+http://developer.android.com/sdk/api_diff/15/changes.html
+http://developer.android.com/reference/android/text/style/SuggestionSpan.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
+http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html
+http://developer.android.com/reference/java/text/Annotation.html
+http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
+http://developer.android.com/reference/java/text/AttributedString.html
+http://developer.android.com/reference/java/text/Bidi.html
+http://developer.android.com/reference/java/text/CollationElementIterator.html
+http://developer.android.com/reference/java/text/CollationKey.html
+http://developer.android.com/reference/java/text/DateFormat.Field.html
+http://developer.android.com/reference/java/text/FieldPosition.html
+http://developer.android.com/reference/java/text/Format.Field.html
+http://developer.android.com/reference/java/text/MessageFormat.Field.html
+http://developer.android.com/reference/java/text/Normalizer.html
+http://developer.android.com/reference/java/text/NumberFormat.Field.html
+http://developer.android.com/reference/java/text/ParsePosition.html
+http://developer.android.com/reference/java/text/Normalizer.Form.html
+http://developer.android.com/reference/java/text/ParseException.html
+http://developer.android.com/reference/org/apache/http/FormattedHeader.html
+http://developer.android.com/reference/org/apache/http/HeaderElement.html
+http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
+http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/HttpConnection.html
+http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
+http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
+http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
+http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
+http://developer.android.com/reference/org/apache/http/HttpStatus.html
+http://developer.android.com/reference/org/apache/http/TokenIterator.html
+http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
+http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
+http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
+http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
+http://developer.android.com/reference/org/apache/http/ParseException.html
+http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
+http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodImpl.html
+http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodImpl.html
+http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
+http://developer.android.com/reference/android/service/dreams/DreamService.html
+http://developer.android.com/reference/android/speech/RecognitionService.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeechService.html
+http://developer.android.com/reference/android/net/VpnService.html
+http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
+http://developer.android.com/reference/java/security/Certificate.html
+http://developer.android.com/reference/java/security/DomainCombiner.html
+http://developer.android.com/reference/java/security/KeyStore.Entry.html
+http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
+http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
+http://developer.android.com/reference/java/security/Policy.Parameters.html
+http://developer.android.com/reference/java/security/PrivateKey.html
+http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
+http://developer.android.com/reference/java/security/PublicKey.html
+http://developer.android.com/reference/java/security/AccessControlContext.html
+http://developer.android.com/reference/java/security/AccessController.html
+http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
+http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
+http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
+http://developer.android.com/reference/java/security/AllPermission.html
+http://developer.android.com/reference/java/security/BasicPermission.html
+http://developer.android.com/reference/java/security/CodeSigner.html
+http://developer.android.com/reference/java/security/CodeSource.html
+http://developer.android.com/reference/java/security/DigestOutputStream.html
+http://developer.android.com/reference/java/security/GuardedObject.html
+http://developer.android.com/reference/java/security/Identity.html
+http://developer.android.com/reference/java/security/IdentityScope.html
+http://developer.android.com/reference/java/security/KeyFactory.html
+http://developer.android.com/reference/java/security/KeyFactorySpi.html
+http://developer.android.com/reference/java/security/KeyPair.html
+http://developer.android.com/reference/java/security/KeyPairGenerator.html
+http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
+http://developer.android.com/reference/java/security/KeyRep.html
+http://developer.android.com/reference/java/security/KeyStore.Builder.html
+http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
+http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
+http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
+http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
+http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
+http://developer.android.com/reference/java/security/KeyStoreSpi.html
+http://developer.android.com/reference/java/security/MessageDigest.html
+http://developer.android.com/reference/java/security/MessageDigestSpi.html
+http://developer.android.com/reference/java/security/Permissions.html
+http://developer.android.com/reference/java/security/Policy.html
+http://developer.android.com/reference/java/security/PolicySpi.html
+http://developer.android.com/reference/java/security/ProtectionDomain.html
+http://developer.android.com/reference/java/security/Provider.Service.html
+http://developer.android.com/reference/java/security/SecureClassLoader.html
+http://developer.android.com/reference/java/security/SecureRandomSpi.html
+http://developer.android.com/reference/java/security/Security.html
+http://developer.android.com/reference/java/security/SecurityPermission.html
+http://developer.android.com/reference/java/security/Signature.html
+http://developer.android.com/reference/java/security/SignatureSpi.html
+http://developer.android.com/reference/java/security/SignedObject.html
+http://developer.android.com/reference/java/security/Signer.html
+http://developer.android.com/reference/java/security/Timestamp.html
+http://developer.android.com/reference/java/security/UnresolvedPermission.html
+http://developer.android.com/reference/java/security/KeyRep.Type.html
+http://developer.android.com/reference/java/security/AccessControlException.html
+http://developer.android.com/reference/java/security/DigestException.html
+http://developer.android.com/reference/java/security/KeyException.html
+http://developer.android.com/reference/java/security/KeyManagementException.html
+http://developer.android.com/reference/java/security/PrivilegedActionException.html
+http://developer.android.com/reference/java/security/ProviderException.html
+http://developer.android.com/reference/java/security/SignatureException.html
+http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
+http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
+http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
+http://developer.android.com/guide/faq/troubleshooting.html
+http://developer.android.com/reference/java/nio/BufferOverflowException.html
+http://developer.android.com/reference/java/nio/BufferUnderflowException.html
+http://developer.android.com/reference/org/w3c/dom/DOMException.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSException.html
+http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
+http://developer.android.com/reference/android/renderscript/RSRuntimeException.html
+http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
+http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
+http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
+http://developer.android.com/reference/android/renderscript/RSDriverException.html
+http://developer.android.com/reference/android/renderscript/RSIllegalArgumentException.html
+http://developer.android.com/reference/android/renderscript/RSInvalidStateException.html
+http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
+http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
+http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
+http://developer.android.com/reference/android/preference/PreferenceFragment.html
+http://developer.android.com/reference/android/webkit/WebViewFragment.html
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
+http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
+http://developer.android.com/reference/android/preference/PreferenceFragment.OnPreferenceStartFragmentCallback.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
+http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
+http://developer.android.com/reference/android/preference/CheckBoxPreference.html
+http://developer.android.com/reference/android/preference/DialogPreference.html
+http://developer.android.com/reference/android/preference/EditTextPreference.html
+http://developer.android.com/reference/android/preference/ListPreference.html
+http://developer.android.com/reference/android/preference/MultiSelectListPreference.html
+http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
+http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html
+http://developer.android.com/reference/android/preference/PreferenceCategory.html
+http://developer.android.com/reference/android/preference/PreferenceGroup.html
+http://developer.android.com/reference/android/preference/PreferenceManager.html
+http://developer.android.com/reference/android/preference/PreferenceScreen.html
+http://developer.android.com/reference/android/preference/RingtonePreference.html
+http://developer.android.com/reference/android/preference/SwitchPreference.html
+http://developer.android.com/reference/android/preference/TwoStatePreference.html
+http://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
+http://developer.android.com/guide/samples/index.html
+http://developer.android.com/reference/com/google/android/gms/common/AccountPicker.html
+http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html
+http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
+http://developer.android.com/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
+http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthException.html
+http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
+http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
+http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
+http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
+http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
+http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
+http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
+http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
+http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
+http://developer.android.com/resources/samples/USB/AdbTest/index.html
+http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
+http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
+http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
+http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
+http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
+http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
+http://developer.android.com/resources/samples/TicTacToeMain/index.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
+http://developer.android.com/reference/android/support/v4/view/KeyEventCompat.html
+http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html
+http://developer.android.com/reference/android/support/v4/view/MotionEventCompat.html
+http://developer.android.com/reference/android/support/v4/view/VelocityTrackerCompat.html
+http://developer.android.com/reference/android/support/v4/view/ViewCompatJB.html
+http://developer.android.com/reference/android/support/v4/view/ViewCompatJellybeanMr1.html
+http://developer.android.com/reference/android/support/v4/view/ViewConfigurationCompat.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.SavedState.html
+http://developer.android.com/reference/android/support/v4/view/ViewPager.SimpleOnPageChangeListener.html
+http://developer.android.com/reference/javax/xml/namespace/NamespaceContext.html
+http://developer.android.com/reference/javax/xml/transform/Source.html
+http://developer.android.com/reference/javax/xml/transform/Transformer.html
+http://developer.android.com/reference/javax/xml/transform/sax/TemplatesHandler.html
+http://developer.android.com/reference/javax/xml/transform/sax/TransformerHandler.html
+http://developer.android.com/reference/javax/xml/transform/sax/SAXResult.html
+http://developer.android.com/reference/javax/xml/transform/sax/SAXSource.html
+http://developer.android.com/reference/javax/xml/transform/sax/SAXTransformerFactory.html
+http://developer.android.com/reference/javax/xml/transform/TransformerFactory.html
+http://developer.android.com/reference/javax/xml/transform/Result.html
+http://developer.android.com/reference/javax/xml/transform/Templates.html
+http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
+http://developer.android.com/reference/android/text/method/BaseKeyListener.html
+http://developer.android.com/reference/android/text/method/BaseMovementMethod.html
+http://developer.android.com/reference/android/text/method/DateKeyListener.html
+http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
+http://developer.android.com/reference/android/text/method/DialerKeyListener.html
+http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
+http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
+http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
+http://developer.android.com/reference/android/text/method/NumberKeyListener.html
+http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
+http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
+http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
+http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
+http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
+http://developer.android.com/reference/android/text/method/TextKeyListener.html
+http://developer.android.com/reference/android/text/method/TimeKeyListener.html
+http://developer.android.com/reference/android/text/method/Touch.html
+http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
+http://developer.android.com/reference/android/security/KeyChainAliasCallback.html
+http://developer.android.com/reference/android/security/KeyChain.html
+http://developer.android.com/reference/android/security/KeyChainException.html
+http://developer.android.com/reference/javax/net/ServerSocketFactory.html
+http://developer.android.com/reference/javax/net/SocketFactory.html
+http://developer.android.com/guide/topics/clipboard/copy-paste.html
+http://developer.android.com/reference/javax/sql/CommonDataSource.html
+http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
+http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
+http://developer.android.com/reference/javax/sql/DataSource.html
+http://developer.android.com/reference/javax/sql/RowSetInternal.html
+http://developer.android.com/reference/javax/sql/RowSetListener.html
+http://developer.android.com/reference/javax/sql/RowSetMetaData.html
+http://developer.android.com/reference/javax/sql/RowSetReader.html
+http://developer.android.com/reference/javax/sql/RowSetWriter.html
+http://developer.android.com/reference/javax/sql/StatementEventListener.html
+http://developer.android.com/reference/java/sql/ResultSet.html
+http://developer.android.com/reference/java/sql/Array.html
+http://developer.android.com/reference/java/sql/Blob.html
+http://developer.android.com/reference/java/sql/Clob.html
+http://developer.android.com/reference/java/sql/NClob.html
+http://developer.android.com/reference/java/sql/Ref.html
+http://developer.android.com/reference/java/sql/RowId.html
+http://developer.android.com/reference/java/sql/SQLXML.html
+http://developer.android.com/reference/java/net/URL.html
+http://developer.android.com/reference/java/sql/ResultSetMetaData.html
+http://developer.android.com/reference/java/sql/Statement.html
+http://developer.android.com/reference/java/sql/SQLWarning.html
+http://developer.android.com/reference/java/sql/Wrapper.html
+http://developer.android.com/reference/java/sql/SQLException.html
+http://developer.android.com/reference/java/sql/Connection.html
+http://developer.android.com/reference/java/sql/SQLData.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html
+http://developer.android.com/resources/samples/get.html
+http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
+http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
+http://developer.android.com/reference/java/util/jar/Attributes.Name.html
+http://developer.android.com/reference/java/util/jar/JarFile.html
+http://developer.android.com/reference/java/util/jar/JarOutputStream.html
+http://developer.android.com/reference/java/util/jar/Pack200.html
+http://developer.android.com/reference/java/util/jar/JarException.html
+http://developer.android.com/reference/java/nio/charset/CoderResult.html
+http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
+http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
+http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
+http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
+http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
+http://developer.android.com/reference/android/webkit/DownloadListener.html
+http://developer.android.com/reference/android/webkit/GeolocationPermissions.Callback.html
+http://developer.android.com/reference/android/webkit/PluginStub.html
+http://developer.android.com/reference/android/webkit/ValueCallback.html
+http://developer.android.com/reference/android/webkit/WebChromeClient.CustomViewCallback.html
+http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
+http://developer.android.com/reference/android/webkit/WebStorage.QuotaUpdater.html
+http://developer.android.com/reference/android/webkit/WebView.FindListener.html
+http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
+http://developer.android.com/reference/android/webkit/CookieManager.html
+http://developer.android.com/reference/android/webkit/CookieSyncManager.html
+http://developer.android.com/reference/android/webkit/DateSorter.html
+http://developer.android.com/reference/android/webkit/GeolocationPermissions.html
+http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
+http://developer.android.com/reference/android/webkit/JsPromptResult.html
+http://developer.android.com/reference/android/webkit/JsResult.html
+http://developer.android.com/reference/android/webkit/MimeTypeMap.html
+http://developer.android.com/reference/android/webkit/SslErrorHandler.html
+http://developer.android.com/reference/android/webkit/URLUtil.html
+http://developer.android.com/reference/android/webkit/WebIconDatabase.html
+http://developer.android.com/reference/android/webkit/WebResourceResponse.html
+http://developer.android.com/reference/android/webkit/WebStorage.html
+http://developer.android.com/reference/android/webkit/WebStorage.Origin.html
+http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
+http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
+http://developer.android.com/reference/android/webkit/WebViewDatabase.html
+http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
+http://developer.android.com/reference/android/webkit/WebSettings.PluginState.html
+http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
+http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
+http://developer.android.com/reference/android/webkit/WebSettings.ZoomDensity.html
+http://developer.android.com/reference/android/net/http/SslError.html
+http://developer.android.com/reference/javax/xml/transform/ErrorListener.html
+http://developer.android.com/reference/javax/xml/transform/SourceLocator.html
+http://developer.android.com/reference/javax/xml/transform/URIResolver.html
+http://developer.android.com/reference/javax/xml/transform/OutputKeys.html
+http://developer.android.com/reference/javax/xml/transform/TransformerConfigurationException.html
+http://developer.android.com/reference/javax/xml/transform/TransformerException.html
+http://developer.android.com/reference/javax/xml/transform/TransformerFactoryConfigurationError.html
+http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
+http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
+http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodSessionImpl.html
+http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html
+http://developer.android.com/reference/android/inputmethodservice/InputMethodService.Insets.html
+http://developer.android.com/reference/android/inputmethodservice/Keyboard.Key.html
+http://developer.android.com/reference/android/inputmethodservice/Keyboard.Row.html
+http://developer.android.com/sdk/api_diff/14/changes.html
+http://developer.android.com/resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html
+http://developer.android.com/resources/samples/VoicemailProviderDemo/index.html
+http://developer.android.com/reference/android/media/effect/Effect.html
+http://developer.android.com/reference/android/media/effect/EffectContext.html
+http://developer.android.com/reference/android/media/effect/EffectFactory.html
+http://developer.android.com/resources/samples/RandomMusicPlayer/index.html
+http://developer.android.com/reference/android/nfc/NdefMessage.html
+http://developer.android.com/reference/android/nfc/NfcAdapter.html
+http://developer.android.com/reference/android/nfc/NfcAdapter.CreateNdefMessageCallback.html
+http://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback.html
+http://developer.android.com/reference/android/nfc/NdefRecord.html
+http://developer.android.com/resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDeviceList.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.GroupInfoListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pGroup.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
+http://developer.android.com/resources/samples/WiFiDirectDemo/index.html
+http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.AccessibilityStateChangeListener.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.EngineInfo.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine.html
+http://developer.android.com/reference/android/speech/tts/SynthesisRequest.html
+http://developer.android.com/reference/android/speech/tts/SynthesisCallback.html
+http://developer.android.com/resources/samples/TtsEngine/index.html
+http://developer.android.com/reference/android/renderscript/Script.html
+http://developer.android.com/reference/android/renderscript/FieldPacker.html
+http://developer.android.com/reference/android/net/VpnService.Builder.html
+http://developer.android.com/reference/android/app/admin/DeviceAdminInfo.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
+http://developer.android.com/resources/samples/ApiDemos/res/layout/switches.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
+http://developer.android.com/guide/practices/jni.html
+http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
+http://developer.android.com/reference/android/net/Credentials.html
+http://developer.android.com/reference/android/net/LocalServerSocket.html
+http://developer.android.com/reference/android/net/LocalSocket.html
+http://developer.android.com/reference/android/net/LocalSocketAddress.html
+http://developer.android.com/reference/android/net/MailTo.html
+http://developer.android.com/reference/android/net/Proxy.html
+http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
+http://developer.android.com/reference/android/net/SSLSessionCache.html
+http://developer.android.com/reference/android/net/TrafficStats.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
+http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
+http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
+http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
+http://developer.android.com/reference/android/net/NetworkInfo.State.html
+http://developer.android.com/reference/android/net/ParseException.html
+http://developer.android.com/reference/com/google/android/gms/package-summary.html
+http://developer.android.com/reference/com/google/android/gms/auth/package-summary.html
+http://developer.android.com/reference/com/google/android/gms/common/package-summary.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/package-summary.html
+http://developer.android.com/reference/com/google/android/gms/panorama/package-summary.html
+http://developer.android.com/reference/com/google/android/gms/plus/package-summary.html
+http://developer.android.com/guide/topics/wireless/bluetooth.html
+http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnControlStatusChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnEnableStatusChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/BassBoost.OnParameterChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.OnParameterChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/Equalizer.OnParameterChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/Virtualizer.OnParameterChangeListener.html
+http://developer.android.com/reference/android/media/audiofx/Visualizer.OnDataCaptureListener.html
+http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html
+http://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor.html
+http://developer.android.com/reference/android/media/audiofx/AutomaticGainControl.html
+http://developer.android.com/reference/android/media/audiofx/BassBoost.html
+http://developer.android.com/reference/android/media/audiofx/BassBoost.Settings.html
+http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.Settings.html
+http://developer.android.com/reference/android/media/audiofx/Equalizer.html
+http://developer.android.com/reference/android/media/audiofx/Equalizer.Settings.html
+http://developer.android.com/reference/android/media/audiofx/NoiseSuppressor.html
+http://developer.android.com/reference/android/media/audiofx/PresetReverb.html
+http://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings.html
+http://developer.android.com/reference/android/media/audiofx/Virtualizer.html
+http://developer.android.com/reference/android/media/audiofx/Virtualizer.Settings.html
+http://developer.android.com/reference/android/media/audiofx/Visualizer.html
+http://developer.android.com/reference/java/net/InetAddress.html
+http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
+http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
+http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
+http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
+http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
+http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
+http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
+http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
+http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
+http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLES20Activity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CompressedTextureActivity.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
+http://developer.android.com/resources/dashboard/opengl.html
+http://developer.android.com/reference/java/util/logging/Filter.html
+http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
+http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
+http://developer.android.com/reference/java/util/logging/ErrorManager.html
+http://developer.android.com/reference/java/util/logging/FileHandler.html
+http://developer.android.com/reference/java/util/logging/Formatter.html
+http://developer.android.com/reference/java/util/logging/Handler.html
+http://developer.android.com/reference/java/util/logging/Level.html
+http://developer.android.com/reference/java/util/logging/Logger.html
+http://developer.android.com/reference/java/util/logging/LoggingPermission.html
+http://developer.android.com/reference/java/util/logging/LogManager.html
+http://developer.android.com/reference/java/util/logging/LogRecord.html
+http://developer.android.com/reference/java/util/logging/MemoryHandler.html
+http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
+http://developer.android.com/reference/java/util/logging/SocketHandler.html
+http://developer.android.com/reference/java/util/logging/StreamHandler.html
+http://developer.android.com/reference/java/util/logging/XMLFormatter.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
+http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.html
+http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest.html
http://developer.android.com/reference/android/renderscript/AllocationAdapter.html
http://developer.android.com/reference/android/renderscript/BaseObj.html
http://developer.android.com/reference/android/renderscript/Byte2.html
@@ -2998,9 +3515,7 @@
http://developer.android.com/reference/android/renderscript/Double2.html
http://developer.android.com/reference/android/renderscript/Double3.html
http://developer.android.com/reference/android/renderscript/Double4.html
-http://developer.android.com/reference/android/renderscript/Element.html
http://developer.android.com/reference/android/renderscript/Element.Builder.html
-http://developer.android.com/reference/android/renderscript/FieldPacker.html
http://developer.android.com/reference/android/renderscript/FileA3D.html
http://developer.android.com/reference/android/renderscript/FileA3D.IndexEntry.html
http://developer.android.com/reference/android/renderscript/Float2.html
@@ -3042,621 +3557,154 @@
http://developer.android.com/reference/android/renderscript/RenderScriptGL.SurfaceConfig.html
http://developer.android.com/reference/android/renderscript/Sampler.html
http://developer.android.com/reference/android/renderscript/Sampler.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.html
http://developer.android.com/reference/android/renderscript/Script.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.FieldBase.html
-http://developer.android.com/reference/android/renderscript/ScriptC.html
+http://developer.android.com/reference/android/renderscript/Script.FieldID.html
+http://developer.android.com/reference/android/renderscript/Script.KernelID.html
+http://developer.android.com/reference/android/renderscript/ScriptGroup.html
+http://developer.android.com/reference/android/renderscript/ScriptGroup.Builder.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsic.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlend.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlur.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicColorMatrix.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve3x3.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve5x5.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicLUT.html
+http://developer.android.com/reference/android/renderscript/ScriptIntrinsicYuvToRGB.html
http://developer.android.com/reference/android/renderscript/Short2.html
http://developer.android.com/reference/android/renderscript/Short3.html
http://developer.android.com/reference/android/renderscript/Short4.html
-http://developer.android.com/reference/android/renderscript/Type.html
http://developer.android.com/reference/android/renderscript/Type.Builder.html
-http://developer.android.com/reference/android/util/Pair.html
-http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
-http://developer.android.com/reference/java/util/zip/ZipError.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.html
-http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ChannelListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ConnectionInfoListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdTxtRecordListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.GroupInfoListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.PeerListListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.UpnpServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDeviceList.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pGroup.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.Channel.html
-http://developer.android.com/resources/samples/WiFiDirectDemo/index.html
-http://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/android/hardware/usb/UsbAccessory.html
-http://developer.android.com/reference/android/hardware/usb/UsbDevice.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.ServiceListener.html
-http://developer.android.com/reference/android/bluetooth/BluetoothA2dp.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAssignedNumbers.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Service.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealth.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthAppConfiguration.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthCallback.html
-http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html
-http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
-http://developer.android.com/guide/topics/wireless/bluetooth.html
-http://developer.android.com/reference/renderscript/index.html
-http://developer.android.com/sdk/tools-notes.html
-http://developer.android.com/reference/java/util/concurrent/BlockingDeque.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingDeque.html
-http://developer.android.com/reference/android/media/AudioRecord.OnRecordPositionUpdateListener.html
-http://developer.android.com/reference/android/media/AudioTrack.OnPlaybackPositionUpdateListener.html
-http://developer.android.com/reference/android/media/JetPlayer.OnJetEventListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnTimedTextListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnVideoSizeChangedListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.OnScanCompletedListener.html
-http://developer.android.com/reference/android/media/SoundPool.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/media/AsyncPlayer.html
-http://developer.android.com/reference/android/media/AudioFormat.html
-http://developer.android.com/reference/android/media/AudioRecord.html
-http://developer.android.com/reference/android/media/AudioTrack.html
-http://developer.android.com/reference/android/media/CameraProfile.html
-http://developer.android.com/reference/android/media/ExifInterface.html
-http://developer.android.com/reference/android/media/FaceDetector.html
-http://developer.android.com/reference/android/media/FaceDetector.Face.html
-http://developer.android.com/reference/android/media/JetPlayer.html
-http://developer.android.com/reference/android/media/MediaActionSound.html
-http://developer.android.com/reference/android/media/MediaCodec.html
-http://developer.android.com/reference/android/media/MediaCodec.BufferInfo.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html
-http://developer.android.com/reference/android/media/MediaCodecList.html
-http://developer.android.com/reference/android/media/MediaCrypto.html
-http://developer.android.com/reference/android/media/MediaExtractor.html
-http://developer.android.com/reference/android/media/MediaFormat.html
-http://developer.android.com/reference/android/media/MediaPlayer.TrackInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.Callback.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteCategory.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteGroup.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.SimpleCallback.html
-http://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.VolumeCallback.html
-http://developer.android.com/reference/android/media/MediaSyncEvent.html
-http://developer.android.com/reference/android/media/RemoteControlClient.html
-http://developer.android.com/reference/android/media/RemoteControlClient.MetadataEditor.html
-http://developer.android.com/reference/android/media/Ringtone.html
-http://developer.android.com/reference/android/media/ThumbnailUtils.html
-http://developer.android.com/reference/android/media/TimedText.html
-http://developer.android.com/reference/android/media/ToneGenerator.html
-http://developer.android.com/reference/android/media/MediaCryptoException.html
-http://developer.android.com/reference/org/xml/sax/AttributeList.html
-http://developer.android.com/reference/org/xml/sax/Attributes.html
-http://developer.android.com/reference/org/xml/sax/ContentHandler.html
-http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
-http://developer.android.com/reference/org/xml/sax/DTDHandler.html
-http://developer.android.com/reference/org/xml/sax/EntityResolver.html
-http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
-http://developer.android.com/reference/org/xml/sax/Locator.html
-http://developer.android.com/reference/org/xml/sax/Parser.html
-http://developer.android.com/reference/org/xml/sax/XMLFilter.html
-http://developer.android.com/reference/org/xml/sax/HandlerBase.html
-http://developer.android.com/reference/org/xml/sax/InputSource.html
-http://developer.android.com/reference/org/xml/sax/SAXException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
-http://developer.android.com/reference/org/xml/sax/SAXParseException.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
-http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
-http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
-http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
-http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
-http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html
-http://developer.android.com/shareables/training/CustomView.zip
-http://developer.android.com/guide/developing/tools/adt.html
-http://developer.android.com/reference/android/util/Base64.html
-http://developer.android.com/reference/android/util/Base64InputStream.html
-http://developer.android.com/reference/android/util/Base64OutputStream.html
-http://developer.android.com/reference/android/util/Config.html
-http://developer.android.com/reference/android/util/DebugUtils.html
-http://developer.android.com/reference/android/util/EventLog.html
-http://developer.android.com/reference/android/util/EventLog.Event.html
-http://developer.android.com/reference/android/util/EventLogTags.html
-http://developer.android.com/reference/android/util/EventLogTags.Description.html
-http://developer.android.com/reference/android/util/FloatMath.html
-http://developer.android.com/reference/android/util/JsonReader.html
-http://developer.android.com/reference/android/util/JsonWriter.html
-http://developer.android.com/reference/android/util/LogPrinter.html
-http://developer.android.com/reference/android/util/LongSparseArray.html
-http://developer.android.com/reference/android/util/LruCache.html
-http://developer.android.com/reference/android/util/MonthDisplayHelper.html
-http://developer.android.com/reference/android/util/Patterns.html
-http://developer.android.com/reference/android/util/PrintStreamPrinter.html
-http://developer.android.com/reference/android/util/PrintWriterPrinter.html
-http://developer.android.com/reference/android/util/SparseIntArray.html
-http://developer.android.com/reference/android/util/StateSet.html
-http://developer.android.com/reference/android/util/StringBuilderPrinter.html
-http://developer.android.com/reference/android/util/TimeUtils.html
-http://developer.android.com/reference/android/util/TimingLogger.html
-http://developer.android.com/reference/android/util/Xml.html
-http://developer.android.com/reference/android/util/Base64DataException.html
-http://developer.android.com/reference/android/util/MalformedJsonException.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
-http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
-http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
-http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
-http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
-http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
-http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
-http://developer.android.com/reference/org/apache/http/util/LangUtils.html
-http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXTransformerFactory.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
-http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
-http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/Deflater.html
-http://developer.android.com/reference/java/util/zip/ZipEntry.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
-http://developer.android.com/reference/java/text/CharacterIterator.html
-http://developer.android.com/reference/java/text/Annotation.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
-http://developer.android.com/reference/java/text/AttributedString.html
-http://developer.android.com/reference/java/text/Bidi.html
-http://developer.android.com/reference/java/text/BreakIterator.html
-http://developer.android.com/reference/java/text/ChoiceFormat.html
-http://developer.android.com/reference/java/text/CollationElementIterator.html
-http://developer.android.com/reference/java/text/CollationKey.html
-http://developer.android.com/reference/java/text/Collator.html
-http://developer.android.com/reference/java/text/DateFormat.Field.html
-http://developer.android.com/reference/java/text/DateFormatSymbols.html
-http://developer.android.com/reference/java/text/DecimalFormat.html
-http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
-http://developer.android.com/reference/java/text/FieldPosition.html
-http://developer.android.com/reference/java/text/Format.html
-http://developer.android.com/reference/java/text/Format.Field.html
-http://developer.android.com/reference/java/text/MessageFormat.html
-http://developer.android.com/reference/java/text/MessageFormat.Field.html
-http://developer.android.com/reference/java/text/Normalizer.html
-http://developer.android.com/reference/java/text/NumberFormat.html
-http://developer.android.com/reference/java/text/NumberFormat.Field.html
-http://developer.android.com/reference/java/text/ParsePosition.html
-http://developer.android.com/reference/java/text/RuleBasedCollator.html
-http://developer.android.com/reference/java/text/StringCharacterIterator.html
-http://developer.android.com/reference/java/text/ParseException.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
-http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
-http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
-http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html
-http://developer.android.com/reference/java/security/cert/Certificate.html
-http://developer.android.com/reference/java/security/cert/CertificateException.html
-http://developer.android.com/reference/renderscript/rs__core_8rsh.html
-http://developer.android.com/reference/javax/xml/transform/sax/TemplatesHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/TransformerHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXResult.html
-http://developer.android.com/reference/android/sax/ElementListener.html
-http://developer.android.com/reference/android/sax/EndElementListener.html
-http://developer.android.com/reference/android/sax/EndTextElementListener.html
-http://developer.android.com/reference/android/sax/StartElementListener.html
-http://developer.android.com/reference/android/sax/TextElementListener.html
-http://developer.android.com/reference/android/sax/Element.html
-http://developer.android.com/reference/android/sax/RootElement.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/reference/android/view/textservice/SentenceSuggestionsInfo.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerInfo.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSubtype.html
-http://developer.android.com/reference/android/view/textservice/TextInfo.html
-http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
-http://developer.android.com/videos/index.html
-http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
-http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
-http://developer.android.com/guide/topics/ui/layout-objects.html
-http://developer.android.com/resources/samples/ApiDemos/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-http://developer.android.com/reference/android/text/GetChars.html
-http://developer.android.com/reference/android/text/Html.ImageGetter.html
-http://developer.android.com/reference/android/text/Html.TagHandler.html
-http://developer.android.com/reference/android/text/NoCopySpan.html
-http://developer.android.com/reference/android/text/ParcelableSpan.html
-http://developer.android.com/reference/android/text/SpanWatcher.html
-http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
-http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
-http://developer.android.com/reference/android/text/AlteredCharSequence.html
-http://developer.android.com/reference/android/text/AndroidCharacter.html
-http://developer.android.com/reference/android/text/Annotation.html
-http://developer.android.com/reference/android/text/AutoText.html
-http://developer.android.com/reference/android/text/BoringLayout.html
-http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
-http://developer.android.com/reference/android/text/DynamicLayout.html
-http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
-http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
-http://developer.android.com/reference/android/text/Layout.Directions.html
-http://developer.android.com/reference/android/text/LoginFilter.html
-http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
-http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
-http://developer.android.com/reference/android/text/SpannableString.html
-http://developer.android.com/reference/android/text/SpannableStringBuilder.html
-http://developer.android.com/reference/android/text/SpannedString.html
-http://developer.android.com/reference/android/text/StaticLayout.html
-http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
-http://developer.android.com/reference/java/math/BigDecimal.html
-http://developer.android.com/reference/java/math/MathContext.html
-http://developer.android.com/reference/java/security/interfaces/DSAKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
-http://developer.android.com/reference/java/security/interfaces/DSAParams.html
-http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/ECKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
-http://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener.html
-http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
-http://developer.android.com/reference/android/hardware/SensorEventListener.html
-http://developer.android.com/reference/android/hardware/SensorListener.html
-http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html
-http://developer.android.com/reference/android/hardware/Camera.Face.html
-http://developer.android.com/reference/android/hardware/Camera.Size.html
-http://developer.android.com/reference/android/hardware/GeomagneticField.html
-http://developer.android.com/reference/android/hardware/Sensor.html
-http://developer.android.com/reference/android/hardware/SensorEvent.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
-http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
-http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
-http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
-http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
-http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
-http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
-http://developer.android.com/reference/dalvik/system/BaseDexClassLoader.html
-http://developer.android.com/reference/dalvik/system/DexClassLoader.html
-http://developer.android.com/reference/dalvik/system/DexFile.html
-http://developer.android.com/reference/dalvik/system/PathClassLoader.html
-http://developer.android.com/reference/java/util/regex/MatchResult.html
-http://developer.android.com/reference/java/util/regex/Matcher.html
-http://developer.android.com/reference/android/Manifest.html
-http://developer.android.com/reference/android/Manifest.permission_group.html
-http://developer.android.com/reference/android/R.html
-http://developer.android.com/reference/android/R.anim.html
-http://developer.android.com/reference/android/R.animator.html
-http://developer.android.com/reference/android/R.array.html
-http://developer.android.com/reference/android/R.bool.html
-http://developer.android.com/reference/android/R.color.html
-http://developer.android.com/reference/android/R.dimen.html
-http://developer.android.com/reference/android/R.drawable.html
-http://developer.android.com/reference/android/R.fraction.html
-http://developer.android.com/reference/android/R.integer.html
-http://developer.android.com/reference/android/R.interpolator.html
-http://developer.android.com/reference/android/R.layout.html
-http://developer.android.com/reference/android/R.menu.html
-http://developer.android.com/reference/android/R.mipmap.html
-http://developer.android.com/reference/android/R.plurals.html
-http://developer.android.com/reference/android/R.raw.html
-http://developer.android.com/reference/android/R.string.html
-http://developer.android.com/reference/android/R.xml.html
-http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
-http://developer.android.com/sdk/api_diff/3/changes.html
-http://developer.android.com/about/versions/android-1.5-highlights.html
-http://developer.android.com/reference/android/speech/RecognizerIntent.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
-http://developer.android.com/reference/android/net/http/HttpResponseCache.html
-http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
-http://developer.android.com/reference/android/net/http/SslError.html
-http://developer.android.com/reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
-http://developer.android.com/reference/android/net/Credentials.html
-http://developer.android.com/reference/android/net/DhcpInfo.html
-http://developer.android.com/reference/android/net/LocalServerSocket.html
-http://developer.android.com/reference/android/net/LocalSocket.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.html
-http://developer.android.com/reference/android/net/MailTo.html
-http://developer.android.com/reference/android/net/NetworkInfo.html
-http://developer.android.com/reference/android/net/Proxy.html
-http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
-http://developer.android.com/reference/android/net/SSLSessionCache.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
-http://developer.android.com/reference/android/net/VpnService.Builder.html
-http://developer.android.com/reference/android/net/ParseException.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
-http://developer.android.com/reference/java/beans/PropertyChangeListener.html
-http://developer.android.com/reference/java/beans/PropertyChangeListenerProxy.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
-http://developer.android.com/sdk/compatibility-library.html
-http://developer.android.com/reference/javax/security/auth/AuthPermission.html
-http://developer.android.com/reference/java/util/logging/LoggingPermission.html
-http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
-http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateBeamUrisCallback.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateNdefMessageCallback.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback.html
-http://developer.android.com/reference/android/nfc/NfcEvent.html
-http://developer.android.com/reference/android/nfc/FormatException.html
-http://developer.android.com/reference/android/nfc/TagLostException.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
-http://developer.android.com/reference/java/util/concurrent/RunnableFuture.html
-http://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/Future.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.LeadingMarginSpan2.html
-http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.WithDensity.html
+http://developer.android.com/reference/android/renderscript/Allocation.MipmapControl.html
+http://developer.android.com/reference/android/renderscript/Element.DataKind.html
+http://developer.android.com/reference/android/renderscript/Element.DataType.html
+http://developer.android.com/reference/android/renderscript/FileA3D.EntryType.html
+http://developer.android.com/reference/android/renderscript/Font.Style.html
+http://developer.android.com/reference/android/renderscript/Mesh.Primitive.html
+http://developer.android.com/reference/android/renderscript/Program.TextureType.html
+http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.EnvMode.html
+http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.Format.html
+http://developer.android.com/reference/android/renderscript/ProgramRaster.CullMode.html
+http://developer.android.com/reference/android/renderscript/ProgramStore.BlendDstFunc.html
+http://developer.android.com/reference/android/renderscript/ProgramStore.BlendSrcFunc.html
+http://developer.android.com/reference/android/renderscript/ProgramStore.DepthFunc.html
+http://developer.android.com/reference/android/renderscript/RenderScript.Priority.html
+http://developer.android.com/reference/android/renderscript/Sampler.Value.html
+http://developer.android.com/reference/android/renderscript/Type.CubemapFace.html
+http://developer.android.com/reference/java/net/ContentHandlerFactory.html
+http://developer.android.com/reference/java/net/CookiePolicy.html
+http://developer.android.com/reference/java/net/CookieStore.html
+http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
+http://developer.android.com/reference/java/net/FileNameMap.html
+http://developer.android.com/reference/java/net/SocketImplFactory.html
+http://developer.android.com/reference/java/net/SocketOptions.html
+http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
+http://developer.android.com/reference/java/net/Authenticator.html
+http://developer.android.com/reference/java/net/CacheRequest.html
+http://developer.android.com/reference/java/net/CacheResponse.html
+http://developer.android.com/reference/java/net/ContentHandler.html
+http://developer.android.com/reference/java/net/CookieHandler.html
+http://developer.android.com/reference/java/net/CookieManager.html
+http://developer.android.com/reference/java/net/DatagramPacket.html
+http://developer.android.com/reference/java/net/DatagramSocketImpl.html
+http://developer.android.com/reference/java/net/HttpURLConnection.html
+http://developer.android.com/reference/java/net/IDN.html
+http://developer.android.com/reference/java/net/Inet4Address.html
+http://developer.android.com/reference/java/net/Inet6Address.html
+http://developer.android.com/reference/java/net/InetSocketAddress.html
+http://developer.android.com/reference/java/net/InterfaceAddress.html
+http://developer.android.com/reference/java/net/JarURLConnection.html
+http://developer.android.com/reference/java/net/MulticastSocket.html
+http://developer.android.com/reference/java/net/NetPermission.html
+http://developer.android.com/reference/java/net/NetworkInterface.html
+http://developer.android.com/reference/java/net/PasswordAuthentication.html
+http://developer.android.com/reference/java/net/Proxy.html
+http://developer.android.com/reference/java/net/ProxySelector.html
+http://developer.android.com/reference/java/net/ResponseCache.html
+http://developer.android.com/reference/java/net/SecureCacheResponse.html
+http://developer.android.com/reference/java/net/ServerSocket.html
+http://developer.android.com/reference/java/net/SocketAddress.html
+http://developer.android.com/reference/java/net/SocketImpl.html
+http://developer.android.com/reference/java/net/SocketPermission.html
+http://developer.android.com/reference/java/net/URLClassLoader.html
+http://developer.android.com/reference/java/net/URLConnection.html
+http://developer.android.com/reference/java/net/URLDecoder.html
+http://developer.android.com/reference/java/net/URLEncoder.html
+http://developer.android.com/reference/java/net/URLStreamHandler.html
+http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
+http://developer.android.com/reference/java/net/Proxy.Type.html
+http://developer.android.com/reference/java/net/BindException.html
+http://developer.android.com/reference/java/net/ConnectException.html
+http://developer.android.com/reference/java/net/HttpRetryException.html
+http://developer.android.com/reference/java/net/MalformedURLException.html
+http://developer.android.com/reference/java/net/NoRouteToHostException.html
+http://developer.android.com/reference/java/net/PortUnreachableException.html
+http://developer.android.com/reference/java/net/ProtocolException.html
+http://developer.android.com/reference/java/net/SocketException.html
+http://developer.android.com/reference/java/net/UnknownHostException.html
+http://developer.android.com/reference/java/net/UnknownServiceException.html
+http://developer.android.com/reference/java/net/URISyntaxException.html
+http://developer.android.com/reference/android/text/style/CharacterStyle.html
http://developer.android.com/reference/android/text/style/ParagraphStyle.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.html
-http://developer.android.com/reference/android/text/style/UpdateAppearance.html
-http://developer.android.com/reference/android/text/style/UpdateLayout.html
-http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
+http://developer.android.com/reference/org/w3c/dom/ls/DOMImplementationLS.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSInput.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSOutput.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSParser.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSParserFilter.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSResourceResolver.html
+http://developer.android.com/reference/org/w3c/dom/ls/LSSerializer.html
+http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
+http://developer.android.com/google/play/billing/QueryPurchases
+http://developer.android.com/google/play/billing/Consume
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/ClockBackService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/TaskBackService.html
+http://developer.android.com/guide/topics/testing/index.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGestureListener.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturePerformedListener.html
+http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturingListener.html
+http://developer.android.com/reference/android/gesture/Gesture.html
+http://developer.android.com/reference/android/gesture/GestureLibraries.html
+http://developer.android.com/reference/android/gesture/GestureLibrary.html
+http://developer.android.com/reference/android/gesture/GesturePoint.html
+http://developer.android.com/reference/android/gesture/GestureStore.html
+http://developer.android.com/reference/android/gesture/GestureStroke.html
+http://developer.android.com/reference/android/gesture/GestureUtils.html
+http://developer.android.com/reference/android/gesture/OrientedBoundingBox.html
+http://developer.android.com/reference/android/gesture/Prediction.html
+http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
http://developer.android.com/reference/android/text/style/BulletSpan.html
-http://developer.android.com/reference/android/text/style/CharacterStyle.html
-http://developer.android.com/reference/android/text/style/ClickableSpan.html
-http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
-http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
http://developer.android.com/reference/android/text/style/EasyEditSpan.html
http://developer.android.com/reference/android/text/style/ForegroundColorSpan.html
-http://developer.android.com/reference/android/text/style/IconMarginSpan.html
-http://developer.android.com/reference/android/text/style/ImageSpan.html
http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
-http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
-http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
+http://developer.android.com/reference/android/text/style/LocaleSpan.html
http://developer.android.com/reference/android/text/style/QuoteSpan.html
-http://developer.android.com/reference/android/text/style/RasterizerSpan.html
http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
-http://developer.android.com/reference/android/text/style/ReplacementSpan.html
http://developer.android.com/reference/android/text/style/ScaleXSpan.html
http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
http://developer.android.com/reference/android/text/style/StyleSpan.html
http://developer.android.com/reference/android/text/style/SubscriptSpan.html
http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
http://developer.android.com/reference/android/text/style/TypefaceSpan.html
http://developer.android.com/reference/android/text/style/UnderlineSpan.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
-http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
-http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
-http://developer.android.com/reference/java/util/concurrent/Delayed.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
-http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
-http://developer.android.com/resources/samples/HoneycombGallery/index.html
-http://developer.android.com/resources/samples/ActionBarCompat/index.html
-http://developer.android.com/reference/android/mtp/MtpConstants.html
-http://developer.android.com/reference/android/mtp/MtpDevice.html
-http://developer.android.com/reference/android/mtp/MtpDeviceInfo.html
-http://developer.android.com/reference/android/mtp/MtpObjectInfo.html
-http://developer.android.com/reference/android/mtp/MtpStorageInfo.html
-http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
-http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
-http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
-http://developer.android.com/reference/javax/net/ssl/KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLSession.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
-http://developer.android.com/reference/javax/net/ssl/TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLContext.html
-http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
-http://developer.android.com/reference/javax/net/ssl/SSLParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
-http://developer.android.com/reference/javax/net/ssl/SSLException.html
-http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
-http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
-http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
-http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
-http://developer.android.com/reference/java/security/cert/X509Certificate.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html
-http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
-http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/Preferences.html
-http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
-http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
-http://developer.android.com/reference/java/util/zip/ZipException.html
-http://developer.android.com/reference/javax/xml/validation/Schema.html
-http://developer.android.com/tools/debug-tasks.html
-http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
-http://developer.android.com/reference/javax/crypto/CipherInputStream.html
-http://developer.android.com/reference/java/util/zip/DeflaterInputStream.html
-http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
-http://developer.android.com/reference/java/util/zip/ZipInputStream.html
-http://developer.android.com/reference/android/text/format/Time.html
-http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
-http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
-http://developer.android.com/reference/org/apache/http/cookie/SM.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
-http://developer.android.com/reference/java/lang/annotation/Retention.html
-http://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
-http://developer.android.com/reference/org/apache/http/auth/AUTH.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
-http://developer.android.com/reference/org/apache/http/auth/AuthState.html
-http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
-http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
-http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
-http://developer.android.com/sdk/api_diff/14/changes.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html
-http://developer.android.com/resources/samples/VoicemailProviderDemo/index.html
-http://developer.android.com/resources/samples/RandomMusicPlayer/index.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html
-http://developer.android.com/resources/samples/SpellChecker/SampleSpellCheckerService/index.html
-http://developer.android.com/resources/samples/SpellChecker/HelloSpellChecker/index.html
-http://developer.android.com/resources/samples/TtsEngine/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
-http://developer.android.com/reference/java/util/logging/Filter.html
-http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
-http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
-http://developer.android.com/reference/java/util/logging/ErrorManager.html
-http://developer.android.com/reference/java/util/logging/FileHandler.html
-http://developer.android.com/reference/java/util/logging/Formatter.html
-http://developer.android.com/reference/java/util/logging/Handler.html
-http://developer.android.com/reference/java/util/logging/Level.html
-http://developer.android.com/reference/java/util/logging/Logger.html
-http://developer.android.com/reference/java/util/logging/LogManager.html
-http://developer.android.com/reference/java/util/logging/LogRecord.html
-http://developer.android.com/reference/java/util/logging/MemoryHandler.html
-http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
-http://developer.android.com/reference/java/util/logging/SocketHandler.html
-http://developer.android.com/reference/java/util/logging/StreamHandler.html
-http://developer.android.com/reference/java/util/logging/XMLFormatter.html
-http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
-http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
-http://developer.android.com/reference/java/security/cert/CertPathValidator.html
-http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
-http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
+http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
+http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
+http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
+http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ChannelListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdServiceResponseListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdTxtRecordListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ServiceResponseListener.html
+http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.UpnpServiceResponseListener.html
http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
@@ -3673,163 +3721,400 @@
http://developer.android.com/reference/java/lang/reflect/Method.html
http://developer.android.com/reference/java/lang/reflect/Modifier.html
http://developer.android.com/reference/java/lang/reflect/Proxy.html
+http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
-http://developer.android.com/sdk/api_diff/11/changes.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html
+http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
+http://developer.android.com/resources/samples/SoftKeyboard/index.html
+http://developer.android.com/guide/practices/security.html
+http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
+http://developer.android.com/reference/javax/crypto/spec/PSource.html
+http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
+http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
+http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
+http://developer.android.com/reference/java/sql/SQLPermission.html
+http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
+http://developer.android.com/reference/java/lang/annotation/Retention.html
+http://developer.android.com/reference/android/text/style/AlignmentSpan.html
+http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
+http://developer.android.com/reference/android/text/style/LeadingMarginSpan.LeadingMarginSpan2.html
+http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
+http://developer.android.com/reference/android/text/style/LineHeightSpan.html
+http://developer.android.com/reference/android/text/style/LineHeightSpan.WithDensity.html
+http://developer.android.com/reference/android/text/style/TabStopSpan.html
+http://developer.android.com/reference/android/text/style/UpdateAppearance.html
+http://developer.android.com/reference/android/text/style/UpdateLayout.html
+http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
+http://developer.android.com/reference/android/text/style/ClickableSpan.html
+http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
+http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
+http://developer.android.com/reference/android/text/style/IconMarginSpan.html
+http://developer.android.com/reference/android/text/style/ImageSpan.html
+http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
+http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
+http://developer.android.com/reference/android/text/style/RasterizerSpan.html
+http://developer.android.com/reference/android/text/style/ReplacementSpan.html
+http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
+http://developer.android.com/reference/android/speech/RecognitionListener.html
+http://developer.android.com/reference/android/speech/RecognitionService.Callback.html
+http://developer.android.com/reference/android/speech/RecognizerIntent.html
+http://developer.android.com/reference/android/speech/RecognizerResultsIntent.html
+http://developer.android.com/reference/android/speech/SpeechRecognizer.html
+http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
+http://developer.android.com/reference/com/google/android/gcm/package-summary.html
+http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
+http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
+http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
+http://developer.android.com/reference/javax/net/ssl/SSLException.html
+http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
+http://developer.android.com/reference/dalvik/bytecode/OpcodeInfo.html
+http://developer.android.com/videos/index.html
+http://developer.android.com/reference/java/nio/ByteOrder.html
+http://developer.android.com/reference/java/nio/DoubleBuffer.html
+http://developer.android.com/reference/java/nio/LongBuffer.html
+http://developer.android.com/reference/java/nio/MappedByteBuffer.html
+http://developer.android.com/reference/java/nio/ShortBuffer.html
+http://developer.android.com/reference/com/google/android/gms/R.html
+http://developer.android.com/reference/com/google/android/gms/R.attr.html
+http://developer.android.com/reference/com/google/android/gms/R.id.html
+http://developer.android.com/reference/com/google/android/gms/R.string.html
+http://developer.android.com/reference/com/google/android/gms/R.styleable.html
+http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
+http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
+http://developer.android.com/reference/javax/xml/transform/dom/DOMLocator.html
+http://developer.android.com/reference/java/beans/PropertyChangeListenerProxy.html
+http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
+http://developer.android.com/shareables/training/BitmapFun.zip
+http://developer.android.com/sdk/api_diff/13/changes.html
+http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html
-http://developer.android.com/resources/samples/USB/AdbTest/index.html
-http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
-http://developer.android.com/reference/android/hardware/usb/UsbInterface.html
-http://developer.android.com/reference/android/hardware/usb/UsbEndpoint.html
-http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
-http://developer.android.com/reference/android/hardware/usb/UsbRequest.html
-http://developer.android.com/reference/android/hardware/usb/UsbConstants.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompatCreatorCallbacks.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompat.html
-http://developer.android.com/reference/java/util/zip/Checksum.html
-http://developer.android.com/reference/java/util/zip/Adler32.html
-http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
-http://developer.android.com/reference/java/util/zip/CRC32.html
-http://developer.android.com/reference/java/util/zip/Inflater.html
-http://developer.android.com/reference/java/util/zip/InflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/ZipFile.html
-http://developer.android.com/reference/java/util/zip/DataFormatException.html
-http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
-http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html
-http://developer.android.com/guide/samples/index.html
-http://developer.android.com/shareables/training/MobileAds.zip
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePad.html
-http://developer.android.com/shareables/training/nsdchat.zip
-http://developer.android.com/reference/java/util/concurrent/Callable.html
-http://developer.android.com/reference/java/util/concurrent/CompletionService.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentNavigableMap.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
-http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListSet.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
-http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
-http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
-http://developer.android.com/reference/java/util/concurrent/Exchanger.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executors.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/Semaphore.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
-http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
-http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
-http://developer.android.com/resources/samples/JetBoy/index.html
-http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
-http://developer.android.com/reference/java/beans/PropertyChangeEvent.html
-http://developer.android.com/reference/java/beans/IndexedPropertyChangeEvent.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/CertPathParameters.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/CertSelector.html
-http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
-http://developer.android.com/reference/java/security/cert/CRLSelector.html
-http://developer.android.com/reference/java/security/cert/PolicyNode.html
-http://developer.android.com/reference/java/security/cert/X509Extension.html
-http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
-http://developer.android.com/reference/java/security/cert/CertificateFactory.html
-http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
-http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
-http://developer.android.com/reference/java/security/cert/CertStore.html
-http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
-http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
-http://developer.android.com/reference/java/security/cert/CRL.html
-http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/PKIXParameters.html
-http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
-http://developer.android.com/reference/java/security/cert/TrustAnchor.html
-http://developer.android.com/reference/java/security/cert/X509CertSelector.html
-http://developer.android.com/reference/java/security/cert/X509CRL.html
-http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
-http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
-http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
-http://developer.android.com/reference/java/security/cert/CertStoreException.html
-http://developer.android.com/reference/java/security/cert/CRLException.html
-http://developer.android.com/resources/samples/BluetoothChat/index.html
-http://developer.android.com/resources/samples/BluetoothHDP/index.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
-http://developer.android.com/reference/android/accounts/AccountManagerCallback.html
-http://developer.android.com/reference/android/accounts/AccountManagerFuture.html
-http://developer.android.com/reference/android/accounts/OnAccountsUpdateListener.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html
-http://developer.android.com/reference/android/accounts/AuthenticatorDescription.html
-http://developer.android.com/reference/android/accounts/AccountsException.html
-http://developer.android.com/reference/android/accounts/AuthenticatorException.html
-http://developer.android.com/reference/android/accounts/NetworkErrorException.html
-http://developer.android.com/reference/android/accounts/OperationCanceledException.html
-http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
-http://developer.android.com/guide/topics/fundamentals.html
-http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
+http://developer.android.com/resources/samples/RenderScript/index.html
http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
+http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
+http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
http://developer.android.com/reference/org/apache/http/impl/client/RedirectLocations.html
http://developer.android.com/reference/org/apache/http/impl/client/RoutedRequest.html
http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
+http://developer.android.com/shareables/training/ActivityLifecycle.zip
+http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.ConditionObject.html
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
+http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
+http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
+http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
+http://developer.android.com/reference/junit/framework/Protectable.html
+http://developer.android.com/reference/junit/framework/TestListener.html
+http://developer.android.com/reference/junit/framework/TestFailure.html
+http://developer.android.com/reference/junit/framework/AssertionFailedError.html
+http://developer.android.com/reference/junit/framework/ComparisonFailure.html
+http://developer.android.com/reference/android/nfc/NfcAdapter.CreateBeamUrisCallback.html
+http://developer.android.com/reference/android/nfc/NfcEvent.html
+http://developer.android.com/reference/android/nfc/Tag.html
+http://developer.android.com/reference/android/nfc/FormatException.html
+http://developer.android.com/reference/android/nfc/TagLostException.html
+http://developer.android.com/guide/topics/nfc/index.html
+http://developer.android.com/reference/android/net/http/AndroidHttpClient.html
+http://developer.android.com/reference/android/net/http/HttpResponseCache.html
+http://developer.android.com/reference/android/net/http/SslCertificate.html
+http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
+http://developer.android.com/reference/android/net/http/X509TrustManagerExtensions.html
+http://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html
+http://developer.android.com/reference/java/lang/ref/PhantomReference.html
+http://developer.android.com/reference/java/lang/ref/Reference.html
+http://developer.android.com/reference/java/lang/ref/SoftReference.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactory.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactoryLoader.html
-http://developer.android.com/reference/javax/xml/validation/TypeInfoProvider.html
-http://developer.android.com/reference/javax/xml/validation/Validator.html
+http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
+http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
+http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
http://developer.android.com/reference/javax/xml/validation/ValidatorHandler.html
-http://developer.android.com/reference/java/lang/ref/WeakReference.html
+http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
+http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
+http://developer.android.com/reference/javax/net/ssl/KeyManager.html
+http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
+http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
+http://developer.android.com/reference/javax/net/ssl/TrustManager.html
+http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
+http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
+http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
+http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
+http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
+http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
+http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
+http://developer.android.com/reference/javax/net/ssl/SSLContext.html
+http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
+http://developer.android.com/reference/javax/net/ssl/SSLParameters.html
+http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
+http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
+http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
+http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
+http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
+http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
+http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
+http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
+http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
+http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
+http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
+http://developer.android.com/reference/javax/security/cert/X509Certificate.html
+http://developer.android.com/reference/android/text/format/DateFormat.html
+http://developer.android.com/reference/android/text/format/DateUtils.html
+http://developer.android.com/reference/android/text/format/Formatter.html
+http://developer.android.com/reference/android/text/format/Time.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DraggableDot.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
-http://developer.android.com/reference/javax/security/auth/Destroyable.html
-http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
+http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
+http://developer.android.com/guide/developing/tools/draw9patch.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
+http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
+http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompat.html
+http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompatIcs.html
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
+http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
+http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
+http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
+http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
+http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
+http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
+http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
+http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
+http://developer.android.com/reference/org/apache/http/util/LangUtils.html
+http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
+http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
+http://developer.android.com/reference/android/location/GpsStatus.Listener.html
+http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html
+http://developer.android.com/reference/android/location/LocationListener.html
+http://developer.android.com/reference/android/location/Address.html
+http://developer.android.com/reference/android/location/Criteria.html
+http://developer.android.com/reference/android/location/Geocoder.html
+http://developer.android.com/reference/android/location/GpsSatellite.html
+http://developer.android.com/reference/android/location/GpsStatus.html
+http://developer.android.com/reference/android/location/Location.html
+http://developer.android.com/reference/junit/runner/BaseTestRunner.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html
+http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnUtteranceCompletedListener.html
+http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
+http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
+http://developer.android.com/reference/android/view/ViewDebug.FlagToString.html
+http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
+http://developer.android.com/reference/android/support/v4/content/Loader.OnLoadCompleteListener.html
+http://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader.html
+http://developer.android.com/reference/android/support/v4/content/ContextCompat.html
+http://developer.android.com/reference/android/support/v4/content/Loader.ForceLoadContentObserver.html
+http://developer.android.com/reference/java/lang/Deprecated.html
+http://developer.android.com/reference/java/lang/annotation/Documented.html
+http://developer.android.com/reference/android/test/FlakyTest.html
+http://developer.android.com/reference/java/lang/annotation/Inherited.html
+http://developer.android.com/reference/android/webkit/JavascriptInterface.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
+http://developer.android.com/reference/java/lang/Override.html
+http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
+http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
+http://developer.android.com/reference/android/annotation/SuppressLint.html
+http://developer.android.com/reference/java/lang/SuppressWarnings.html
+http://developer.android.com/reference/java/lang/annotation/Target.html
+http://developer.android.com/reference/android/annotation/TargetApi.html
+http://developer.android.com/reference/dalvik/annotation/TestTarget.html
+http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
+http://developer.android.com/reference/android/test/UiThreadTest.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
+http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
+http://developer.android.com/guide/developing/tools/adt.html
+http://developer.android.com/reference/javax/xml/transform/dom/DOMResult.html
http://developer.android.com/reference/javax/xml/transform/stream/StreamResult.html
+http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
+http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
+http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
+http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
+http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
+http://developer.android.com/reference/javax/security/auth/login/LoginException.html
+http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
+http://developer.android.com/reference/junit/runner/Version.html
+http://developer.android.com/reference/java/awt/font/NumericShaper.html
+http://developer.android.com/reference/java/awt/font/TextAttribute.html
+http://developer.android.com/about/versions/android-1.5.html
+http://developer.android.com/about/versions/android-1.6.html
+http://developer.android.com/about/versions/android-2.1.html
+http://developer.android.com/about/versions/android-2.2.html
+http://developer.android.com/about/versions/android-2.3.html
+http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
+http://developer.android.com/reference/java/sql/CallableStatement.html
+http://developer.android.com/reference/java/sql/DatabaseMetaData.html
+http://developer.android.com/reference/java/sql/Driver.html
+http://developer.android.com/reference/java/sql/ParameterMetaData.html
+http://developer.android.com/reference/java/sql/PreparedStatement.html
+http://developer.android.com/reference/java/sql/Savepoint.html
+http://developer.android.com/reference/java/sql/SQLInput.html
+http://developer.android.com/reference/java/sql/SQLOutput.html
+http://developer.android.com/reference/java/sql/Struct.html
+http://developer.android.com/reference/java/sql/DriverManager.html
+http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
+http://developer.android.com/reference/java/sql/Types.html
+http://developer.android.com/reference/java/sql/ClientInfoStatus.html
+http://developer.android.com/reference/java/sql/RowIdLifetime.html
+http://developer.android.com/reference/java/sql/BatchUpdateException.html
+http://developer.android.com/reference/java/sql/DataTruncation.html
+http://developer.android.com/reference/java/sql/SQLClientInfoException.html
+http://developer.android.com/reference/java/sql/SQLDataException.html
+http://developer.android.com/reference/java/sql/SQLFeatureNotSupportedException.html
+http://developer.android.com/reference/java/sql/SQLIntegrityConstraintViolationException.html
+http://developer.android.com/reference/java/sql/SQLInvalidAuthorizationSpecException.html
+http://developer.android.com/reference/java/sql/SQLNonTransientConnectionException.html
+http://developer.android.com/reference/java/sql/SQLNonTransientException.html
+http://developer.android.com/reference/java/sql/SQLRecoverableException.html
+http://developer.android.com/reference/java/sql/SQLSyntaxErrorException.html
+http://developer.android.com/reference/java/sql/SQLTimeoutException.html
+http://developer.android.com/reference/java/sql/SQLTransactionRollbackException.html
+http://developer.android.com/reference/java/sql/SQLTransientConnectionException.html
+http://developer.android.com/reference/java/sql/SQLTransientException.html
+http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html
+http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
+http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
+http://developer.android.com/sdk/api_diff/12/changes.html
+http://developer.android.com/reference/android/mtp/MtpDevice.html
+http://developer.android.com/reference/android/mtp/MtpStorageInfo.html
+http://developer.android.com/reference/android/mtp/MtpDeviceInfo.html
+http://developer.android.com/reference/android/mtp/MtpObjectInfo.html
+http://developer.android.com/reference/android/mtp/MtpConstants.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html
+http://developer.android.com/reference/android/net/rtp/RtpStream.html
+http://developer.android.com/reference/android/net/rtp/AudioStream.html
+http://developer.android.com/reference/android/net/rtp/AudioGroup.html
+http://developer.android.com/reference/android/net/rtp/AudioCodec.html
+http://developer.android.com/reference/android/net/sip/SipProfile.Builder.html
+http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
+http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html
+http://developer.android.com/guide/topics/usb/index.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
+http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
+http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
+http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
+http://developer.android.com/resources/tutorials/views/hello-spinner.html
+http://developer.android.com/resources/tutorials/views/hello-listview.html
+http://developer.android.com/resources/tutorials/views/hello-gridview.html
+http://developer.android.com/sdk/api_diff/17/changes.html
+http://developer.android.com/sdk/api_diff/16/changes.html
+http://developer.android.com/about/versions/android-3.1-highlights.html
+http://developer.android.com/sdk/api_diff/11/changes.html
+http://developer.android.com/sdk/api_diff/9/changes.html
+http://developer.android.com/sdk/api_diff/8/changes.html
+http://developer.android.com/about/versions/android-2.2-highlights.html
+http://developer.android.com/sdk/api_diff/7/changes.html
+http://developer.android.com/about/versions/android-2.0-highlights.html
+http://developer.android.com/about/versions/android-2.0.1.html
+http://developer.android.com/sdk/api_diff/6/changes.html
+http://developer.android.com/about/versions/android-2.0.html
+http://developer.android.com/sdk/api_diff/5/changes.html
+http://developer.android.com/sdk/api_diff/4/changes.html
+http://developer.android.com/about/versions/android-1.6-highlights.html
+http://developer.android.com/sdk/api_diff/3/changes.html
+http://developer.android.com/about/versions/android-1.5-highlights.html
+http://developer.android.com/about/versions/android-1.1.html
+http://developer.android.com/reference/javax/xml/transform/stream/StreamSource.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.html
+http://developer.android.com/reference/com/google/android/gms/maps/MapFragment.html
+http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMapOptions.html
+http://developer.android.com/reference/android/os/storage/OnObbStateChangeListener.html
+http://developer.android.com/guide/topics/location/obtaining-user-location.html
+http://developer.android.com/sdk/ndk/index.html
+http://developer.android.com/reference/java/beans/PropertyChangeListener.html
+http://developer.android.com/reference/java/beans/PropertyChangeSupport.html
+http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
+http://developer.android.com/resources/samples/AndroidBeamDemo/index.html
+http://developer.android.com/reference/android/telephony/SmsManager.html
+http://developer.android.com/reference/javax/security/cert/Certificate.html
+http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
+http://developer.android.com/reference/javax/security/cert/CertificateException.html
+http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
+http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
+http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
+http://developer.android.com/tools/help/uiautomator/null
+http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
+http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
+http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
+http://developer.android.com/shareables/training/nsdchat.zip
+http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
+http://developer.android.com/reference/org/json/JSONObject.html
+http://developer.android.com/reference/org/w3c/dom/DOMConfiguration.html
+http://developer.android.com/reference/org/w3c/dom/Document.html
+http://developer.android.com/reference/org/w3c/dom/Node.html
+http://developer.android.com/reference/java/security/acl/Acl.html
+http://developer.android.com/reference/java/security/acl/Group.html
+http://developer.android.com/reference/java/security/acl/Owner.html
+http://developer.android.com/reference/java/security/acl/Permission.html
+http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
+http://developer.android.com/reference/java/security/acl/LastOwnerException.html
+http://developer.android.com/reference/java/security/acl/NotOwnerException.html
+http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
+http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
+http://developer.android.com/reference/renderscript/index.html
http://developer.android.com/reference/renderscript/globals.html
http://developer.android.com/reference/renderscript/annotated.html
http://developer.android.com/reference/renderscript/rs__types_8rsh_source.html
@@ -3849,391 +4134,107 @@
http://developer.android.com/reference/renderscript/structrs__script.html
http://developer.android.com/reference/renderscript/structrs__allocation.html
http://developer.android.com/reference/renderscript/rs__core_8rsh_source.html
-http://developer.android.com/reference/javax/security/auth/Subject.html
-http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnErrorListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnEventListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnInfoListener.html
-http://developer.android.com/reference/android/drm/DrmStore.ConstraintsColumns.html
-http://developer.android.com/reference/android/drm/DrmConvertedStatus.html
-http://developer.android.com/reference/android/drm/DrmErrorEvent.html
-http://developer.android.com/reference/android/drm/DrmEvent.html
-http://developer.android.com/reference/android/drm/DrmInfo.html
-http://developer.android.com/reference/android/drm/DrmInfoEvent.html
-http://developer.android.com/reference/android/drm/DrmInfoRequest.html
-http://developer.android.com/reference/android/drm/DrmInfoStatus.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.html
-http://developer.android.com/reference/android/drm/DrmRights.html
-http://developer.android.com/reference/android/drm/DrmStore.html
-http://developer.android.com/reference/android/drm/DrmStore.Action.html
-http://developer.android.com/reference/android/drm/DrmStore.DrmObjectType.html
-http://developer.android.com/reference/android/drm/DrmStore.Playback.html
-http://developer.android.com/reference/android/drm/DrmStore.RightsStatus.html
-http://developer.android.com/reference/android/drm/DrmSupportInfo.html
-http://developer.android.com/reference/android/drm/DrmUtils.html
-http://developer.android.com/reference/android/drm/DrmUtils.ExtendedMetadataParser.html
-http://developer.android.com/reference/android/drm/ProcessedData.html
-http://developer.android.com/guide/developing/device.html
-http://developer.android.com/sdk/adding-components.html
-http://developer.android.com/reference/java/security/acl/Acl.html
-http://developer.android.com/reference/java/security/acl/AclEntry.html
-http://developer.android.com/reference/java/security/acl/Owner.html
-http://developer.android.com/reference/java/security/acl/Permission.html
-http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
-http://developer.android.com/reference/java/security/acl/LastOwnerException.html
-http://developer.android.com/reference/java/security/acl/NotOwnerException.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSResourceResolver.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSInput.html
-http://developer.android.com/reference/javax/crypto/Cipher.html
-http://developer.android.com/reference/javax/crypto/KeyGenerator.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html
-http://developer.android.com/reference/android/support/v4/util/LongSparseArray.html
-http://developer.android.com/reference/android/support/v4/util/LruCache.html
-http://developer.android.com/reference/android/support/v4/util/SparseArrayCompat.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
-http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
-http://developer.android.com/guide/developing/tools/draw9patch.html
-http://developer.android.com/guide/practices/design/responsiveness.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
-http://developer.android.com/reference/org/w3c/dom/ls/DOMImplementationLS.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSOutput.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParser.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParserFilter.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSSerializer.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/changes-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
-http://developer.android.com/reference/java/lang/ref/Reference.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
-http://developer.android.com/resources/samples/SipDemo/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLES20Activity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CompressedTextureActivity.html
-http://developer.android.com/resources/dashboard/opengl.html
-http://developer.android.com/guide/faq/index.html
-http://developer.android.com/reference/java/beans/PropertyChangeSupport.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
-http://developer.android.com/resources/tutorials/views/hello-datepicker.html
-http://developer.android.com/resources/tutorials/views/hello-timepicker.html
-http://developer.android.com/shareables/training/BitmapFun.zip
-http://developer.android.com/resources/tutorials/views/index.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/index.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/src/com/example/android/rs/hellocompute/mono.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/support/v4/widget/EdgeEffectCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListenerCompat.html
-http://developer.android.com/shareables/training/NetworkUsage.zip
-http://developer.android.com/reference/renderscript/rs__element_8rsh.html
-http://developer.android.com/reference/renderscript/structrs__element.html
-http://developer.android.com/guide/topics/location/obtaining-user-location.html
-http://developer.android.com/sdk/api_diff/8/changes.html
-http://developer.android.com/about/versions/android-2.2-highlights.html
-http://developer.android.com/reference/android/speech/RecognitionListener.html
-http://developer.android.com/shareables/training/PhotoIntentActivity.zip
-http://developer.android.com/guide/topics/fundamentals/loaders.html
-http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
-http://developer.android.com/reference/javax/crypto/CipherSpi.html
-http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
-http://developer.android.com/reference/javax/crypto/KeyAgreement.html
-http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
-http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
-http://developer.android.com/reference/javax/crypto/Mac.html
-http://developer.android.com/reference/javax/crypto/MacSpi.html
-http://developer.android.com/reference/javax/crypto/NullCipher.html
-http://developer.android.com/reference/javax/crypto/SealedObject.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
-http://developer.android.com/reference/javax/crypto/BadPaddingException.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
-http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
-http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
-http://developer.android.com/reference/javax/crypto/ShortBufferException.html
-http://developer.android.com/reference/org/json/JSONArray.html
-http://developer.android.com/reference/org/json/JSONObject.html
-http://developer.android.com/reference/org/json/JSONStringer.html
-http://developer.android.com/reference/org/json/JSONTokener.html
-http://developer.android.com/reference/org/json/JSONException.html
-http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.FlagToString.html
-http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
-http://developer.android.com/tools/sdk/ndk/overview.html
-http://developer.android.com/reference/java/lang/ref/PhantomReference.html
-http://developer.android.com/reference/java/lang/ref/SoftReference.html
-http://developer.android.com/sdk/api_diff/14/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/changes-summary.html
-http://developer.android.com/guide/faq/framework.html
-http://developer.android.com/guide/faq/licensingandoss.html
-http://developer.android.com/guide/faq/security.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGestureListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturePerformedListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturingListener.html
-http://developer.android.com/reference/android/gesture/Gesture.html
-http://developer.android.com/reference/android/gesture/GestureLibraries.html
-http://developer.android.com/reference/android/gesture/GestureLibrary.html
-http://developer.android.com/reference/android/gesture/GesturePoint.html
-http://developer.android.com/reference/android/gesture/GestureStore.html
-http://developer.android.com/reference/android/gesture/GestureStroke.html
-http://developer.android.com/reference/android/gesture/GestureUtils.html
-http://developer.android.com/reference/android/gesture/OrientedBoundingBox.html
-http://developer.android.com/reference/android/gesture/Prediction.html
-http://developer.android.com/resources/samples/TicTacToeLib/AndroidManifest.html
-http://developer.android.com/resources/samples/TicTacToeMain/AndroidManifest.html
-http://developer.android.com/sdk/eclipse-adt.html
-http://developer.android.com/resources/tutorials/views/hello-webview.html
-http://developer.android.com/resources/samples/BackupRestore/src/com/example/android/backuprestore/ExampleAgent.html
-http://developer.android.com/resources/samples/BackupRestore/index.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher_archive.html
-http://developer.android.com/guide/topics/nfc/index.html
-http://developer.android.com/guide/developing/tools/traceview.html
-http://developer.android.com/resources/samples/AccelerometerPlay/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
-http://developer.android.com/guide/topics/clipboard/copy-paste.html
-http://developer.android.com/resources/samples/SpinnerTest/index.html
-http://developer.android.com/resources/samples/Spinner/index.html
+http://developer.android.com/reference/javax/xml/transform/dom/DOMSource.html
+http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
+http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
+http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
+http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
+http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
+http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
+http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
+http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
-http://developer.android.com/reference/android/speech/RecognitionService.Callback.html
-http://developer.android.com/reference/android/speech/SpeechRecognizer.html
-http://developer.android.com/reference/javax/security/cert/X509Certificate.html
-http://developer.android.com/guide/topics/testing/index.html
-http://developer.android.com/guide/google/gcm/server-javadoc/allclasses-frame.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-summary.html
-http://developer.android.com/reference/android/support/v4/content/ContextCompat.html
-http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
-http://developer.android.com/resources/community-groups.html
-http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animations_by_default.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html
-http://developer.android.com/reference/java/lang/Deprecated.html
-http://developer.android.com/reference/java/lang/annotation/Documented.html
-http://developer.android.com/reference/android/test/FlakyTest.html
-http://developer.android.com/reference/java/lang/annotation/Inherited.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
-http://developer.android.com/reference/java/lang/Override.html
-http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
-http://developer.android.com/reference/android/annotation/SuppressLint.html
-http://developer.android.com/reference/java/lang/SuppressWarnings.html
-http://developer.android.com/reference/android/annotation/TargetApi.html
-http://developer.android.com/reference/dalvik/annotation/TestTarget.html
-http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
-http://developer.android.com/reference/android/support/v4/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
-http://developer.android.com/reference/android/support/v4/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/javax/net/SocketFactory.html
-http://developer.android.com/reference/javax/net/ServerSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
-http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
-http://developer.android.com/guide/topics/usb/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html
-http://developer.android.com/resources/samples/RenderScript/index.html
-http://developer.android.com/reference/renderscript/structrs__type.html
-http://developer.android.com/reference/renderscript/structrs__sampler.html
-http://developer.android.com/reference/renderscript/structrs__mesh.html
-http://developer.android.com/reference/renderscript/structrs__path.html
-http://developer.android.com/reference/renderscript/structrs__program__fragment.html
-http://developer.android.com/reference/renderscript/structrs__program__vertex.html
-http://developer.android.com/reference/renderscript/structrs__program__raster.html
-http://developer.android.com/reference/renderscript/structrs__program__store.html
-http://developer.android.com/reference/renderscript/structrs__font.html
-http://developer.android.com/reference/renderscript/structrs__matrix4x4.html
-http://developer.android.com/reference/renderscript/structrs__matrix3x3.html
-http://developer.android.com/reference/renderscript/structrs__matrix2x2.html
-http://developer.android.com/sdk/ndk/index.html
-http://developer.android.com/sdk/api_diff/9/changes.html
-http://developer.android.com/sdk/api_diff/16/changes.html
-http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html
-http://developer.android.com/reference/android/media/audiofx/AutomaticGainControl.html
-http://developer.android.com/reference/android/media/audiofx/NoiseSuppressor.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.html
-http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
-http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
-http://developer.android.com/reference/android/text/util/Rfc822Token.html
-http://developer.android.com/reference/renderscript/rs__object_8rsh.html
-http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
-http://developer.android.com/reference/renderscript/rs__allocation_8rsh.html
-http://developer.android.com/reference/renderscript/rs__atomic_8rsh.html
-http://developer.android.com/reference/renderscript/rs__cl_8rsh.html
-http://developer.android.com/reference/renderscript/rs__debug_8rsh.html
-http://developer.android.com/reference/renderscript/rs__math_8rsh.html
-http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html
-http://developer.android.com/reference/renderscript/rs__quaternion_8rsh.html
-http://developer.android.com/reference/renderscript/rs__sampler_8rsh.html
-http://developer.android.com/reference/renderscript/rs__time_8rsh.html
-http://developer.android.com/reference/renderscript/globals_func.html
-http://developer.android.com/reference/renderscript/globals_type.html
-http://developer.android.com/reference/renderscript/globals_enum.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh.html
-http://developer.android.com/reference/javax/security/auth/login/LoginException.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnControlStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnEnableStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.OnDataCaptureListener.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.Settings.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.html
-http://developer.android.com/reference/android/text/format/DateFormat.html
-http://developer.android.com/reference/android/text/format/DateUtils.html
-http://developer.android.com/reference/android/text/format/Formatter.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/index.html
-http://developer.android.com/resources/articles/creating-input-method.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/10/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_statistics.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html
-http://developer.android.com/resources/samples/HoneycombGallery/src/com/example/android/hcgallery/TitlesFragment.html
-http://developer.android.com/sdk/installing.html
-http://developer.android.com/tools/help/layoutopt.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/changes-summary.html
-http://developer.android.com/resources/samples/TicTacToeMain/index.html
-http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
-http://developer.android.com/sdk/api_diff/12/changes.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html
-http://developer.android.com/reference/android/net/rtp/RtpStream.html
-http://developer.android.com/reference/android/net/rtp/AudioStream.html
-http://developer.android.com/reference/android/net/rtp/AudioGroup.html
-http://developer.android.com/reference/android/net/rtp/AudioCodec.html
-http://developer.android.com/sdk/api_diff/4/changes.html
-http://developer.android.com/about/versions/android-1.6-highlights.html
-http://developer.android.com/sdk/api_diff/7/changes.html
-http://developer.android.com/about/versions/android-2.0-highlights.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh_source.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/changes-summary.html
-http://developer.android.com/guide/topics/providers/%7B@docRoot%3C/code
-http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_all.html
+http://developer.android.com/reference/org/json/JSONException.html
+http://developer.android.com/reference/android/net/sip/SipException.html
+http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
+http://developer.android.com/reference/javax/security/auth/callback/Callback.html
+http://developer.android.com/reference/javax/xml/xpath/XPathException.html
+http://developer.android.com/reference/javax/xml/xpath/XPathExpressionException.html
+http://developer.android.com/reference/javax/xml/xpath/XPathFactoryConfigurationException.html
+http://developer.android.com/reference/javax/xml/xpath/XPathFunctionException.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
+http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
http://developer.android.com/sdk/api_diff/9/changes/jdiff_topleftframe.html
http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_all.html
http://developer.android.com/sdk/api_diff/9/changes/changes-summary.html
-http://developer.android.com/guide/google/gcm/client-javadoc/allclasses-frame.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/package-summary.html
-http://developer.android.com/guide/topics/ui/binding.html
-http://developer.android.com/reference/javax/security/cert/CertificateException.html
-http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
-http://developer.android.com/about/versions/android-2.0.html
-http://developer.android.com/sdk/api_diff/5/changes.html
-http://developer.android.com/reference/renderscript/structrs__tm.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/changes-summary.html
-http://developer.android.com/resources/tutorials/views/hello-spinner.html
-http://developer.android.com/resources/tutorials/views/hello-listview.html
-http://developer.android.com/resources/tutorials/views/hello-gridview.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_all.html
+http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
+http://developer.android.com/reference/java/security/interfaces/DSAKey.html
+http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
+http://developer.android.com/reference/java/security/interfaces/DSAParams.html
+http://developer.android.com/reference/java/security/interfaces/ECKey.html
+http://developer.android.com/reference/java/security/interfaces/RSAKey.html
+http://developer.android.com/reference/javax/xml/xpath/XPath.html
+http://developer.android.com/reference/javax/xml/xpath/XPathExpression.html
+http://developer.android.com/reference/javax/xml/xpath/XPathFunction.html
+http://developer.android.com/reference/javax/xml/xpath/XPathFunctionResolver.html
+http://developer.android.com/reference/javax/xml/xpath/XPathVariableResolver.html
+http://developer.android.com/reference/javax/xml/xpath/XPathConstants.html
+http://developer.android.com/reference/javax/xml/xpath/XPathFactory.html
+http://developer.android.com/sdk/api_diff/5/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/changes-summary.html
+http://developer.android.com/reference/android/support/v4/database/DatabaseUtilsCompat.html
+http://developer.android.com/reference/org/json/JSONArray.html
+http://developer.android.com/reference/org/json/JSONStringer.html
+http://developer.android.com/reference/org/json/JSONTokener.html
+http://developer.android.com/sdk/win-usb.html
+http://developer.android.com/reference/android/media/effect/EffectUpdateListener.html
+http://developer.android.com/reference/javax/xml/validation/Schema.html
+http://developer.android.com/reference/android/support/v4/os/ParcelableCompatCreatorCallbacks.html
+http://developer.android.com/reference/android/support/v4/os/ParcelableCompat.html
+http://developer.android.com/reference/org/w3c/dom/Attr.html
+http://developer.android.com/reference/org/w3c/dom/CDATASection.html
+http://developer.android.com/reference/org/w3c/dom/CharacterData.html
+http://developer.android.com/reference/org/w3c/dom/Comment.html
+http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
+http://developer.android.com/reference/org/w3c/dom/DocumentType.html
+http://developer.android.com/reference/org/w3c/dom/DOMError.html
+http://developer.android.com/reference/org/w3c/dom/DOMErrorHandler.html
+http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
+http://developer.android.com/reference/org/w3c/dom/DOMImplementationList.html
+http://developer.android.com/reference/org/w3c/dom/DOMImplementationSource.html
+http://developer.android.com/reference/org/w3c/dom/DOMLocator.html
+http://developer.android.com/reference/org/w3c/dom/DOMStringList.html
+http://developer.android.com/reference/org/w3c/dom/Element.html
+http://developer.android.com/reference/org/w3c/dom/Entity.html
+http://developer.android.com/reference/org/w3c/dom/EntityReference.html
+http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
+http://developer.android.com/reference/org/w3c/dom/NameList.html
+http://developer.android.com/reference/org/w3c/dom/NodeList.html
+http://developer.android.com/reference/org/w3c/dom/Notation.html
+http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
+http://developer.android.com/reference/org/w3c/dom/Text.html
+http://developer.android.com/reference/org/w3c/dom/TypeInfo.html
+http://developer.android.com/reference/org/w3c/dom/UserDataHandler.html
+http://developer.android.com/reference/android/support/v4/content/pm/ActivityInfoCompat.html
+http://developer.android.com/guide/developing/debug-tasks.html
+http://developer.android.com/reference/renderscript/rs__math_8rsh.html
+http://developer.android.com/reference/renderscript/structrs__matrix4x4.html
+http://developer.android.com/reference/renderscript/rs__cl_8rsh.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html
+http://developer.android.com/resources/community-groups.html
+http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
+http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
+http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
+http://developer.android.com/guide/topics/fundamentals/activities.html
+http://developer.android.com/guide/topics/fundamentals/fragments.html
+http://developer.android.com/guide/topics/ui/notifiers/index.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusClient.html
+http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
+http://developer.android.com/sdk/api_diff/11/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/11/changes/changes-summary.html
+http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html
http://developer.android.com/sdk/api_diff/9/changes/jdiff_statistics.html
http://developer.android.com/sdk/api_diff/9/changes/pkg_android.html
http://developer.android.com/sdk/api_diff/9/changes/pkg_android.app.html
@@ -4285,246 +4286,1452 @@
http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
http://developer.android.com/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DraggableDot.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractCursor.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.AudioTrack.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.CameraProfile.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.ExifInterface.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaRecorder.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.Subject.html
+http://developer.android.com/reference/renderscript/structrs__element.html
+http://developer.android.com/reference/renderscript/structrs__type.html
+http://developer.android.com/reference/renderscript/structrs__sampler.html
+http://developer.android.com/reference/renderscript/structrs__mesh.html
+http://developer.android.com/reference/renderscript/structrs__path.html
+http://developer.android.com/reference/renderscript/structrs__program__fragment.html
+http://developer.android.com/reference/renderscript/structrs__program__vertex.html
+http://developer.android.com/reference/renderscript/structrs__program__raster.html
+http://developer.android.com/reference/renderscript/structrs__program__store.html
+http://developer.android.com/reference/renderscript/structrs__font.html
+http://developer.android.com/reference/renderscript/structrs__matrix3x3.html
+http://developer.android.com/reference/renderscript/structrs__matrix2x2.html
+http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
+http://developer.android.com/reference/renderscript/rs__object_8rsh.html
+http://developer.android.com/sdk/api_diff/9/changes/java.net.NetworkInterface.html
+http://developer.android.com/sdk/api_diff/9/changes/java.net.SocketImpl.html
+http://developer.android.com/reference/renderscript/rs__allocation_8rsh.html
+http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/17/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/changes-summary.html
+http://developer.android.com/guide/topics/fundamentals/loaders.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.logging.Logger.html
+http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateUtils.html
+http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
+http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
+http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/17/changes/android.Manifest.permission_group.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.admin.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.appwidget.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.bluetooth.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.http.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.wifi.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.renderscript.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.format.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/17/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.Gravity.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
+http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
+http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.BatteryManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.Binder.html
+http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
+http://developer.android.com/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
+http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/17/changes/android.renderscript.Script.html
+http://developer.android.com/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
+http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateFormat.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.DigitalClock.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.Display.html
+http://developer.android.com/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.SystemClock.html
+http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
+http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/17/changes/android.util.FloatMath.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.Fragment.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.FragmentManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/17/changes/android.location.LocationProvider.html
+http://developer.android.com/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.TextView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.IntentSender.html
+http://developer.android.com/sdk/api_diff/17/changes/android.location.Location.html
+http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
+http://developer.android.com/sdk/api_diff/17/changes/android.text.TextUtils.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
+http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Paint.html
+http://developer.android.com/sdk/api_diff/17/changes/android.opengl.GLES20.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.WallpaperManager.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
+http://developer.android.com/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
+http://developer.android.com/sdk/api_diff/17/changes/android.net.LocalSocket.html
+http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
+http://developer.android.com/sdk/api_diff/17/changes/android.util.LruCache.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.html
+http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.Process.html
+http://developer.android.com/sdk/api_diff/17/changes/android.app.Notification.Builder.html
+http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
+http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
+http://developer.android.com/sdk/api_diff/17/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
+http://developer.android.com/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
+http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Sensor.html
+http://developer.android.com/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.VideoView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.SurfaceView.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
+http://developer.android.com/sdk/api_diff/17/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
+http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
+http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.html
+http://developer.android.com/reference/renderscript/rs__atomic_8rsh.html
+http://developer.android.com/sdk/api_diff/17/changes/jdiff_statistics.html
+http://developer.android.com/shareables/app_widget_templates-v4.0.zip
+http://developer.android.com/sdk/api_diff/11/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/11/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/11/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/11/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/11/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/17/changes/fields_index_all.html
+http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
+http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
+http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
+http://developer.android.com/sdk/api_diff/15/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/15/changes/changes-summary.html
+http://developer.android.com/reference/android/telephony/CellIdentityCdma.html
+http://developer.android.com/reference/android/telephony/CellIdentityGsm.html
+http://developer.android.com/reference/android/telephony/CellIdentityLte.html
+http://developer.android.com/reference/android/telephony/CellInfo.html
+http://developer.android.com/reference/android/telephony/CellInfoCdma.html
+http://developer.android.com/reference/android/telephony/CellInfoGsm.html
+http://developer.android.com/reference/android/telephony/CellInfoLte.html
+http://developer.android.com/reference/android/telephony/CellSignalStrength.html
+http://developer.android.com/reference/android/telephony/CellSignalStrengthCdma.html
+http://developer.android.com/reference/android/telephony/CellSignalStrengthGsm.html
+http://developer.android.com/reference/android/telephony/CellSignalStrengthLte.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.Window.html
+http://developer.android.com/reference/android/drm/DrmManagerClient.OnErrorListener.html
+http://developer.android.com/reference/android/drm/DrmManagerClient.OnEventListener.html
+http://developer.android.com/reference/android/drm/DrmManagerClient.OnInfoListener.html
+http://developer.android.com/reference/android/drm/DrmStore.ConstraintsColumns.html
+http://developer.android.com/reference/android/drm/DrmConvertedStatus.html
+http://developer.android.com/reference/android/drm/DrmErrorEvent.html
+http://developer.android.com/reference/android/drm/DrmEvent.html
+http://developer.android.com/reference/android/drm/DrmInfo.html
+http://developer.android.com/reference/android/drm/DrmInfoEvent.html
+http://developer.android.com/reference/android/drm/DrmInfoRequest.html
+http://developer.android.com/reference/android/drm/DrmInfoStatus.html
+http://developer.android.com/reference/android/drm/DrmManagerClient.html
+http://developer.android.com/reference/android/drm/DrmRights.html
+http://developer.android.com/reference/android/drm/DrmStore.html
+http://developer.android.com/reference/android/drm/DrmStore.Action.html
+http://developer.android.com/reference/android/drm/DrmStore.DrmObjectType.html
+http://developer.android.com/reference/android/drm/DrmStore.Playback.html
+http://developer.android.com/reference/android/drm/DrmStore.RightsStatus.html
+http://developer.android.com/reference/android/drm/DrmSupportInfo.html
+http://developer.android.com/reference/android/drm/DrmUtils.html
+http://developer.android.com/reference/android/drm/DrmUtils.ExtendedMetadataParser.html
+http://developer.android.com/reference/android/drm/ProcessedData.html
+http://developer.android.com/sdk/api_diff/15/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.appwidget.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.bluetooth.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.textservice.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.speech.tts.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.textservice.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/15/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.sql.DataSource.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.sql.RowSet.html
+http://developer.android.com/sdk/api_diff/11/changes/constructors_index_removals.html
+http://developer.android.com/sdk/api_diff/11/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/constructors_index_changes.html
http://developer.android.com/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.AlarmClock.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.html
http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidException.html
http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.AsyncTask.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.AudioManager.html
http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
http://developer.android.com/sdk/api_diff/11/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
http://developer.android.com/sdk/api_diff/11/changes/android.text.ClipboardManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
+http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.LinearLayout.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.Notification.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.OverScroller.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.PopupWindow.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.Scroller.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.Spinner.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebView.html
+http://developer.android.com/reference/android/telephony/CellLocation.html
+http://developer.android.com/reference/android/telephony/NeighboringCellInfo.html
+http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
+http://developer.android.com/reference/android/telephony/PhoneStateListener.html
+http://developer.android.com/reference/android/telephony/ServiceState.html
+http://developer.android.com/reference/android/telephony/SignalStrength.html
+http://developer.android.com/reference/android/telephony/SmsMessage.html
+http://developer.android.com/reference/android/telephony/SmsMessage.SubmitPdu.html
+http://developer.android.com/reference/android/telephony/SmsMessage.MessageClass.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
+http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
+http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
+http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
+http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
+http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
+http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
+http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
+http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
+http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
+http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
+http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
+http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
+http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
+http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
+http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
+http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
+http://developer.android.com/sdk/api_diff/11/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
+http://developer.android.com/sdk/api_diff/9/changes/java.security.AccessController.html
+http://developer.android.com/sdk/api_diff/9/changes/android.location.Criteria.html
+http://developer.android.com/sdk/api_diff/9/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/9/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Calendar.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Array.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Array.html
+http://developer.android.com/sdk/api_diff/9/changes/java.nio.Buffer.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Arrays.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Collections.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Blob.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.BreakIterator.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.CallableStatement.html
+http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.File.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeSet.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeMap.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Class.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.ResourceBundle.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintStream.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintWriter.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Clob.html
+http://developer.android.com/sdk/api_diff/9/changes/android.app.Notification.html
+http://developer.android.com/sdk/api_diff/9/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.CollationKey.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Connection.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.System.html
+http://developer.android.com/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Math.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.StrictMath.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.DataTruncation.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
+http://developer.android.com/sdk/api_diff/9/changes/android.text.format.DateUtils.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
+http://developer.android.com/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.LinkedList.html
+http://developer.android.com/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Double.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Enum.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
+http://developer.android.com/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
+http://developer.android.com/sdk/api_diff/9/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Float.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.Format.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
+http://developer.android.com/sdk/api_diff/9/changes/android.location.Geocoder.html
+http://developer.android.com/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/9/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.Package.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.String.html
+http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Member.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSet.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
+http://developer.android.com/sdk/api_diff/9/changes/java.security.Policy.html
+http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Sensor.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
+http://developer.android.com/sdk/api_diff/9/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
+http://developer.android.com/sdk/api_diff/9/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
+http://developer.android.com/sdk/api_diff/9/changes/java.text.NumberFormat.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
+http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
+http://developer.android.com/sdk/api_diff/9/changes/android.content.IntentSender.html
+http://developer.android.com/sdk/api_diff/9/changes/android.opengl.GLES20.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
+http://developer.android.com/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
+http://developer.android.com/sdk/api_diff/9/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.IOException.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Statement.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLException.html
+http://developer.android.com/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Properties.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Locale.html
+http://developer.android.com/sdk/api_diff/9/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.Types.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
+http://developer.android.com/sdk/api_diff/9/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
+http://developer.android.com/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
+http://developer.android.com/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedInputStream.html
+http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedReader.html
+http://developer.android.com/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
+http://developer.android.com/sdk/api_diff/9/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
+http://developer.android.com/sdk/api_diff/9/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLInput.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.Scanner.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
+http://developer.android.com/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLOutput.html
+http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLWarning.html
+http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
+http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
+http://developer.android.com/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
+http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
+http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html
+http://developer.android.com/sdk/installing.html
+http://developer.android.com/tools/sdk/ndk/overview.html
+http://developer.android.com/reference/dalvik/system/DexClassLoader.html
+http://developer.android.com/sdk/api_diff/13/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/13/changes/changes-summary.html
+http://developer.android.com/tools/help/sqlite3.html
+http://developer.android.com/guide/developing/device.html
+http://developer.android.com/sdk/adding-components.html
+http://developer.android.com/sdk/api_diff/11/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.DropBoxManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.attr.html
http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.BatteryManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.AbsListView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.WallpaperManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.dimen.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
+http://developer.android.com/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.AlarmClock.html
+http://developer.android.com/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.Cursor.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.id.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
+http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AccountManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/11/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.layout.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/11/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.format.Time.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractCursor.html
+http://developer.android.com/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.util.StateSet.html
+http://developer.android.com/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentValues.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/11/changes/android.R.string.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.AsyncTask.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.MenuItem.html
http://developer.android.com/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Deque.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.DropBoxManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
http://developer.android.com/sdk/api_diff/11/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.html
+http://developer.android.com/sdk/api_diff/11/changes/android.util.Patterns.html
http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
http://developer.android.com/sdk/api_diff/11/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.LayoutInflater.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/11/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MenuItem.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableMap.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableSet.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Object.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.OverScroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.Patterns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.Preference.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ProgressDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Proxy.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Queue.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
+http://developer.android.com/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
+http://developer.android.com/reference/android/nfc/tech/IsoDep.html
+http://developer.android.com/reference/android/nfc/tech/MifareClassic.html
+http://developer.android.com/reference/android/nfc/tech/MifareUltralight.html
+http://developer.android.com/reference/android/nfc/tech/Ndef.html
+http://developer.android.com/reference/android/nfc/tech/NdefFormatable.html
+http://developer.android.com/reference/android/nfc/tech/NfcA.html
+http://developer.android.com/reference/android/nfc/tech/NfcB.html
+http://developer.android.com/reference/android/nfc/tech/NfcBarcode.html
+http://developer.android.com/reference/android/nfc/tech/NfcF.html
+http://developer.android.com/reference/android/nfc/tech/NfcV.html
+http://developer.android.com/reference/android/nfc/tech/TagTechnology.html
+http://developer.android.com/reference/android/net/sip/SipManager.html
+http://developer.android.com/reference/android/net/sip/SipAudioCall.html
+http://developer.android.com/resources/samples/SipDemo/index.html
+http://developer.android.com/reference/android/net/sip/SipAudioCall.Listener.html
+http://developer.android.com/reference/android/net/sip/SipErrorCode.html
+http://developer.android.com/reference/android/net/sip/SipSession.html
+http://developer.android.com/reference/android/net/sip/SipSession.Listener.html
+http://developer.android.com/reference/android/net/sip/SipSession.State.html
+http://developer.android.com/reference/android/net/sip/SipRegistrationListener.html
+http://developer.android.com/sdk/api_diff/7/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/changes-summary.html
+http://developer.android.com/sdk/api_diff/4/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/changes-summary.html
+http://developer.android.com/guide/developing/debugging/index.html
+http://developer.android.com/guide/developing/tools/adb.html
+http://developer.android.com/guide/publishing/app-signing.html
+http://developer.android.com/guide/developing/devices/managing-avds.html
+http://developer.android.com/sdk/api_diff/15/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/15/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_all.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
+http://developer.android.com/reference/com/google/android/gms/plus/GooglePlusUtil.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.Builder.html
+http://developer.android.com/reference/com/google/android/gms/plus/PlusSignInButton.html
+http://developer.android.com/sdk/api_diff/16/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/16/changes/changes-summary.html
+http://developer.android.com/guide/appendix/api-levels.html
+http://developer.android.com/sdk/api_diff/17/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
+http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
+http://developer.android.com/sdk/api_diff/5/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginList.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.location.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.format.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.style.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioFormat.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.BatteryManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
+http://developer.android.com/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
+http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.NotificationManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.VideoView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
+http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.CursorWindow.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_dalvik.system.html
+http://developer.android.com/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.format.DateUtils.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.TextPaint.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.Plugin.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Notification.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.format.Formatter.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginData.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
+http://developer.android.com/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/5/changes/android.os.HandlerThread.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
+http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
+http://developer.android.com/sdk/api_diff/5/changes/android.text.InputType.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.IntentService.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.LauncherActivity.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
+http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.Service.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
+http://developer.android.com/sdk/api_diff/5/changes/android.R.drawable.html
+http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
+http://developer.android.com/sdk/api_diff/5/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceView.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
+http://developer.android.com/sdk/api_diff/5/changes/android.media.ToneGenerator.html
+http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMStack.html
+http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.Zygote.html
+http://developer.android.com/sdk/api_diff/5/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/15/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/7/changes/android.app.WallpaperManager.html
+http://developer.android.com/sdk/api_diff/7/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/7/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/7/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/7/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
+http://developer.android.com/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebStorage.html
+http://developer.android.com/sdk/api_diff/7/changes/android.graphics.Rect.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
+http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
+http://developer.android.com/sdk/api_diff/7/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/7/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/7/changes/android.os.PowerManager.html
+http://developer.android.com/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
+http://developer.android.com/sdk/api_diff/7/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
+http://developer.android.com/reference/classes.html
+http://developer.android.com/resources/samples/SpinnerTest/index.html
+http://developer.android.com/resources/samples/Spinner/index.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlay.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/Polygon.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/PolygonOptions.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/Polyline.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/PolylineOptions.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlay.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
+http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdate.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
+http://developer.android.com/reference/com/google/android/gms/maps/Projection.html
+http://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html
+http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/TileProvider.html
+http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html
+http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.AbstractCursor.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
+http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
+http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.WallpaperManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/16/changes/android.security.KeyChain.html
+http://developer.android.com/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionMode.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionProvider.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
+http://developer.android.com/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestSuite.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaPlayer.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Allocation.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.animation.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.appwidget.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.bluetooth.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.drm.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.renderscript.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.security.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.service.textservice.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.speech.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.textservice.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/16/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.framework.Assert.html
+http://developer.android.com/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioRecord.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.html
+http://developer.android.com/sdk/api_diff/16/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
+http://developer.android.com/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.CalendarView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Camera.html
+http://developer.android.com/sdk/api_diff/16/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.Vibrator.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.Loader.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Canvas.html
+http://developer.android.com/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.Item.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipDescription.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.CursorWindow.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
+http://developer.android.com/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObservable.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObserver.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.CookieManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.Cursor.html
+http://developer.android.com/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.Display.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
+http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.TokenWatcher.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Element.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridLayout.html
+http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestResult.html
+http://developer.android.com/sdk/api_diff/16/changes/android.text.Html.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
+http://developer.android.com/sdk/api_diff/16/changes/android.nfc.FormatException.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.Fragment.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.FrameLayout.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.Gallery.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.Gravity.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.ImageView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Sampler.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.ToneGenerator.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
+http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.html
+http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.InputDevice.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.LinearLayout.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Resources.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.Spinner.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.InputEvent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.TextView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.SearchView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewStub.html
+http://developer.android.com/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewParent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.Switch.html
+http://developer.android.com/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
+http://developer.android.com/sdk/api_diff/16/changes/android.app.KeyguardManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Paint.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.JsResult.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.framework.html
+http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.runner.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.Process.html
+http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
+http://developer.android.com/sdk/api_diff/16/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/16/changes/android.net.Uri.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
+http://developer.android.com/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
+http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
+http://developer.android.com/sdk/api_diff/16/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/16/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Script.html
+http://developer.android.com/sdk/api_diff/16/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.TextureView.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.SQLException.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
+http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
+http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebStorage.html
+http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
+http://developer.android.com/sdk/api_diff/13/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/13/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/13/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/13/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/13/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
+http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
+http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
+http://developer.android.com/sdk/api_diff/15/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/16/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/7/changes/jdiff_statistics.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/LatLng.html
http://developer.android.com/sdk/api_diff/11/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.dimen.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.layout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.SparseArray.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Spinner.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.accounts.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.admin.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.appwidget.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.bluetooth.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.html
http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.format.Time.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.WallpaperManager.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.opengl.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.preference.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.tts.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.mock.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.format.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.method.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
http://developer.android.com/sdk/api_diff/11/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/4/changes/android.location.Address.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_android.widget.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_java.lang.html
+http://developer.android.com/sdk/api_diff/11/changes/pkg_java.util.html
+http://developer.android.com/sdk/api_diff/15/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/15/changes/android.view.View.html
+http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
+http://developer.android.com/reference/renderscript/rs__sampler_8rsh.html
+http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
+http://developer.android.com/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
+http://developer.android.com/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
+http://developer.android.com/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
+http://developer.android.com/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
+http://developer.android.com/sdk/api_diff/15/changes/android.database.CursorWindow.html
+http://developer.android.com/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
+http://developer.android.com/sdk/api_diff/15/changes/android.app.Fragment.html
+http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
+http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/15/changes/android.os.IBinder.html
+http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
+http://developer.android.com/sdk/api_diff/15/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
+http://developer.android.com/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
+http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
+http://developer.android.com/sdk/api_diff/15/changes/android.os.RemoteException.html
+http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
+http://developer.android.com/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
+http://developer.android.com/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
+http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
+http://developer.android.com/reference/javax/xml/validation/SchemaFactory.html
+http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.ActivityGroup.html
+http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.res.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.telephony.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/13/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
+http://developer.android.com/sdk/api_diff/13/changes/android.os.Binder.html
+http://developer.android.com/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/13/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/13/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.graphics.Point.html
+http://developer.android.com/sdk/api_diff/13/changes/android.graphics.PointF.html
+http://developer.android.com/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/13/changes/android.view.Display.html
+http://developer.android.com/sdk/api_diff/13/changes/android.os.IBinder.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.Fragment.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.os.PowerManager.html
+http://developer.android.com/sdk/api_diff/13/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/13/changes/android.app.TabActivity.html
+http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
+http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.html
+http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html
+http://developer.android.com/sdk/api_diff/13/changes/jdiff_statistics.html
+http://developer.android.com/reference/renderscript/structrs__tm.html
+http://developer.android.com/reference/javax/xml/validation/SchemaFactoryLoader.html
+http://developer.android.com/reference/javax/xml/validation/TypeInfoProvider.html
+http://developer.android.com/reference/javax/xml/validation/Validator.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
+http://developer.android.com/reference/com/google/android/gms/maps/MapsInitializer.html
+http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
+http://developer.android.com/resources/samples/BluetoothChat/index.html
+http://developer.android.com/resources/samples/BluetoothHDP/index.html
+http://developer.android.com/sdk/api_diff/12/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/changes-summary.html
+http://developer.android.com/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
+http://developer.android.com/sdk/api_diff/11/changes/java.lang.Object.html
+http://developer.android.com/reference/dalvik/system/BaseDexClassLoader.html
+http://developer.android.com/reference/dalvik/system/DexFile.html
+http://developer.android.com/reference/android/sax/Element.html
+http://developer.android.com/reference/android/sax/ElementListener.html
+http://developer.android.com/reference/android/sax/EndElementListener.html
+http://developer.android.com/reference/android/sax/EndTextElementListener.html
+http://developer.android.com/reference/dalvik/system/PathClassLoader.html
+http://developer.android.com/reference/android/sax/RootElement.html
+http://developer.android.com/reference/android/sax/StartElementListener.html
+http://developer.android.com/reference/android/sax/TextElementListener.html
+http://developer.android.com/sdk/api_diff/17/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/jdiff_statistics.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.app.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.html
@@ -4549,353 +5756,315 @@
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.animation.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.anim.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.VERSION.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Typeface.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.TypedValue.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.NinePatch.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
-http://developer.android.com/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
+http://developer.android.com/sdk/api_diff/11/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/11/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.Deque.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.Queue.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
+http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.html
+http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.Builder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewGroup.html
+http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.ImageView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.DatePicker.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.Bundle.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.TextView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
+http://developer.android.com/sdk/api_diff/11/changes/android.net.Proxy.html
+http://developer.android.com/sdk/api_diff/11/changes/android.preference.Preference.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.LayoutInflater.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.Debug.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.Locale.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.GridView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWindow.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWrapper.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.Vibrator.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableMap.html
+http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableSet.html
+http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentValues.html
+http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.html
+http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
+http://developer.android.com/sdk/api_diff/11/changes/android.util.SparseArray.html
+http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.TabWidget.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.Service.html
+http://developer.android.com/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
+http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
+http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/11/changes/android.app.ProgressDialog.html
+http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewParent.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.MotionEvent.html
+http://developer.android.com/guide/topics/network/sip.html
+http://developer.android.com/sdk/api_diff/17/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/17/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/methods_index_changes.html
+http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
+http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
+http://developer.android.com/sdk/api_diff/13/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/13/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/17/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/17/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
+http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.html
http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
-http://developer.android.com/sdk/api_diff/4/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission_group.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.PendingIntent.html
+http://developer.android.com/sdk/api_diff/4/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
+http://developer.android.com/sdk/api_diff/9/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/9/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/9/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/9/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/9/changes/fields_index_all.html
+http://developer.android.com/reference/renderscript/rs__debug_8rsh.html
+http://developer.android.com/reference/renderscript/rs__element_8rsh.html
+http://developer.android.com/reference/renderscript/rs__quaternion_8rsh.html
+http://developer.android.com/reference/renderscript/rs__time_8rsh.html
+http://developer.android.com/reference/renderscript/globals_func.html
+http://developer.android.com/reference/renderscript/globals_type.html
+http://developer.android.com/reference/renderscript/globals_enum.html
+http://developer.android.com/reference/renderscript/rs__graphics_8rsh.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Canvas.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.NinePatch.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Typeface.html
+http://developer.android.com/resources/faq/index.html
+http://developer.android.com/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
+http://developer.android.com/sdk/api_diff/11/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/packages_index_changes.html
+http://developer.android.com/shareables/sample_images.zip
+http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/Tile.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/UrlTileProvider.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/VisibleRegion.html
+http://developer.android.com/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.PopupWindow.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
+http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabWidget.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_dialog.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_list.html
+http://developer.android.com/shareables/icon_templates-v4.0.zip
+http://developer.android.com/shareables/icon_templates-v2.3.zip
+http://developer.android.com/shareables/icon_templates-v2.0.zip
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
+http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
+http://developer.android.com/sdk/api_diff/13/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
http://developer.android.com/sdk/api_diff/4/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.Item.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.FormatException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.SQLException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Notification.html
-http://developer.android.com/reference/javax/security/cert/Certificate.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_all.html
-http://developer.android.com/reference/android/support/v4/content/pm/ActivityInfoCompat.html
-http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
-http://developer.android.com/reference/android/support/v4/net/ConnectivityManagerCompat.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompat.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompatIcs.html
-http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh.html
-http://developer.android.com/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.Config.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.VERSION.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.anim.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.location.Address.html
+http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.VelocityTracker.html
+http://developer.android.com/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ContentProvider.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission_group.html
+http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ComponentName.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/4/changes/android.util.TypedValue.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.Surface.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/4/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.style.html
+http://developer.android.com/sdk/api_diff/4/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
+http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/4/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/4/changes/android.hardware.SensorManager.html
+http://developer.android.com/sdk/api_diff/4/changes/android.R.drawable.html
+http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher_archive.html
+http://developer.android.com/sdk/api_diff/11/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/11/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/9/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/9/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/fields_index_changes.html
+http://developer.android.com/reference/renderscript/rs__mesh_8rsh_source.html
+http://developer.android.com/reference/renderscript/rs__program_8rsh_source.html
+http://developer.android.com/reference/renderscript/rs__graphics_8rsh_source.html
+http://developer.android.com/sdk/api_diff/10/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/10/changes/changes-summary.html
+http://developer.android.com/sdk/api_diff/7/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/fields_index_all.html
http://developer.android.com/resources/samples/NFCDemo/index.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.security.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.framework.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.runner.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Loader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObservable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.TokenWatcher.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestResult.html
-http://developer.android.com/sdk/api_diff/16/changes/android.text.Html.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.Assert.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Element.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Sampler.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Allocation.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CalendarView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Spinner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.FrameLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.SearchView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewStub.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Switch.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.TextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_changes.html
-http://developer.android.com/guide/faq/troubleshooting.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.AbstractCursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipDescription.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
-http://developer.android.com/sdk/api_diff/13/changes.html
-http://developer.android.com/about/versions/android-3.1-highlights.html
-http://developer.android.com/about/versions/android-2.0.1.html
-http://developer.android.com/sdk/api_diff/6/changes.html
-http://developer.android.com/about/versions/android-1.1.html
-http://developer.android.com/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/10/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.bluetooth.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.media.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.nfc.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.speech.html
+http://developer.android.com/sdk/api_diff/10/changes/pkg_android.test.mock.html
+http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
+http://developer.android.com/sdk/api_diff/14/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/14/changes/changes-summary.html
+http://developer.android.com/sdk/api_diff/9/changes/constructors_index_removals.html
+http://developer.android.com/sdk/api_diff/9/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/constructors_index_changes.html
+http://developer.android.com/reference/renderscript/rs__mesh_8rsh.html
+http://developer.android.com/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
+http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
+http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
+http://developer.android.com/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
+http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
+http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
+http://developer.android.com/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/10/changes/android.content.Context.html
+http://developer.android.com/reference/com/google/android/gcm/GCMBaseIntentService.html
+http://developer.android.com/reference/com/google/android/gcm/GCMBroadcastReceiver.html
+http://developer.android.com/reference/com/google/android/gcm/GCMConstants.html
+http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html
+http://developer.android.com/sdk/api_diff/12/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.animation.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.app.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.appwidget.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.pm.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.drm.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.graphics.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.hardware.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.http.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.sip.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.wifi.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.os.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.provider.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.format.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.method.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.util.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.animation.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html
+http://developer.android.com/sdk/api_diff/12/changes/pkg_android.widget.html
http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_removals.html
http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_additions.html
http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_changes.html
@@ -5139,397 +6308,94 @@
http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.File.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.IOException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedInputStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedReader.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintWriter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.System.html
http://developer.android.com/sdk/api_diff/14/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
-http://developer.android.com/sdk/api_diff/16/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/9/changes/java.nio.Buffer.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.security.KeyChain.html
-http://developer.android.com/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/7/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/7/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/7/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_statistics.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/package-tree.html
-http://developer.android.com/guide/google/gcm/client-javadoc/deprecated-list.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index-all.html
-http://developer.android.com/guide/google/gcm/client-javadoc/help-doc.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/package-summary.html
-http://developer.android.com/guide/google/gcm/client-javadoc/allclasses-noframe.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBaseIntentService.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMBroadcastReceiver.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMConstants.html
-http://developer.android.com/guide/google/gcm/client-javadoc/com/google/android/gcm/GCMRegistrar.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.AccessController.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Criteria.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Calendar.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Arrays.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Collections.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.AudioTrack.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Blob.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.BreakIterator.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.CallableStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CameraProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeMap.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Clob.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.CollationKey.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Connection.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.System.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Math.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.StrictMath.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.DataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DataTruncation.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.LinkedList.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.Subject.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Double.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Enum.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Float.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.Format.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Geocoder.html
-http://developer.android.com/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Package.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.String.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Member.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.NetworkInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.Policy.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.SocketImpl.html
-http://developer.android.com/sdk/api_diff/9/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.NumberFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/9/changes/android.opengl.GLES20.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.logging.Logger.html
-http://developer.android.com/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Statement.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Properties.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Types.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLInput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Scanner.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.RowSet.html
-http://developer.android.com/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLOutput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLWarning.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Gallery.html
-http://developer.android.com/guide/google/gcm/client-javadoc/overview-tree.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?deprecated-list.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/GCMConstants.html
-http://developer.android.com/guide/google/gcm/client-javadoc/constant-values.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/GCMBroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.ActivityGroup.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.Point.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.PointF.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.TabActivity.html
-http://developer.android.com/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?constant-values.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.view.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/package-tree.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?index-all.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_changes.html
-http://developer.android.com/guide/appendix/api-levels.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewFilterMode.html
-http://developer.android.com/shareables/search_icons.zip
-http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/constructors_index_changes.html
http://developer.android.com/sdk/api_diff/6/changes/jdiff_topleftframe.html
http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_all.html
http://developer.android.com/sdk/api_diff/6/changes/changes-summary.html
+http://developer.android.com/resources/samples/RenderScript/HelloCompute/index.html
+http://developer.android.com/resources/samples/RenderScript/HelloCompute/src/com/example/android/rs/hellocompute/mono.html
+http://developer.android.com/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.InputEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.KeyEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.Callback.html
+http://developer.android.com/sdk/api_diff/16/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/16/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/16/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/16/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/16/changes/fields_index_all.html
+http://developer.android.com/reference/com/google/android/gcm/server/package-summary.html
+http://developer.android.com/reference/renderscript/rs__program_8rsh.html
+http://developer.android.com/sdk/api_diff/12/changes/android.text.format.Formatter.html
+http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.DebugUtils.html
+http://developer.android.com/sdk/api_diff/12/changes/android.net.TrafficStats.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.TimeUtils.html
+http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
+http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.CookieManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
+http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Camera.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.Config.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.EventLog.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.StateSet.html
+http://developer.android.com/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
+http://developer.android.com/sdk/api_diff/12/changes/android.util.Xml.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
+http://developer.android.com/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
+http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Bitmap.html
+http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
+http://developer.android.com/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/12/changes/android.widget.DatePicker.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.DialogFragment.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.Fragment.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
+http://developer.android.com/sdk/api_diff/12/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
+http://developer.android.com/sdk/api_diff/12/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/12/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
+http://developer.android.com/sdk/api_diff/12/changes/android.provider.Browser.html
+http://developer.android.com/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/12/changes/android.os.Bundle.html
+http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/12/changes/android.widget.RemoteViews.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/12/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/12/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/12/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/12/changes/android.R.attr.html
http://developer.android.com/sdk/api_diff/10/changes/packages_index_all.html
http://developer.android.com/sdk/api_diff/10/changes/classes_index_all.html
http://developer.android.com/sdk/api_diff/10/changes/constructors_index_all.html
http://developer.android.com/sdk/api_diff/10/changes/methods_index_all.html
http://developer.android.com/sdk/api_diff/10/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_changes.html
-http://developer.android.com/tools/help/sqlite3.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/package-tree.html
-http://developer.android.com/guide/google/gcm/server-javadoc/deprecated-list.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index-all.html
-http://developer.android.com/guide/google/gcm/server-javadoc/help-doc.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/package-summary.html
-http://developer.android.com/guide/google/gcm/server-javadoc/allclasses-noframe.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Constants.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Message.Builder.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/MulticastResult.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Result.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/Sender.html
-http://developer.android.com/guide/google/gcm/server-javadoc/com/google/android/gcm/server/InvalidRequestException.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/GCMRegistrar.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_all.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/InvalidRequestException.html
-http://developer.android.com/guide/google/gcm/server-javadoc/serialized-form.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_all.html
-http://developer.android.com/guide/google/gcm/server-javadoc/overview-tree.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?help-doc.html
-http://developer.android.com/guide/google/gcm/server-javadoc/constant-values.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_changes.html
http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_additions.html
http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_changes.html
http://developer.android.com/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
@@ -5540,718 +6406,116 @@
http://developer.android.com/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
http://developer.android.com/sdk/api_diff/6/changes/android.R.attr.html
http://developer.android.com/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/package-tree.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_changes.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/MulticastResult.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?com/google/android/gcm/GCMBaseIntentService.html
-http://developer.android.com/sdk/api_diff/6/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/15/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
-http://developer.android.com/sdk/api_diff/15/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/15/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.RemoteException.html
-http://developer.android.com/sdk/api_diff/15/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
-http://developer.android.com/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_changes.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?index-all.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_statistics.html
http://developer.android.com/sdk/api_diff/15/changes/packages_index_all.html
http://developer.android.com/sdk/api_diff/15/changes/classes_index_all.html
http://developer.android.com/sdk/api_diff/15/changes/constructors_index_all.html
http://developer.android.com/sdk/api_diff/15/changes/methods_index_all.html
http://developer.android.com/sdk/api_diff/15/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/fields_index_additions.html
http://developer.android.com/sdk/api_diff/9/changes/classes_index_removals.html
http://developer.android.com/sdk/api_diff/9/changes/classes_index_additions.html
http://developer.android.com/sdk/api_diff/9/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/7/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/7/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/9/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/6/changes/jdiff_statistics.html
+http://developer.android.com/sdk/api_diff/16/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/16/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/7/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/7/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/14/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/14/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/14/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/14/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/14/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/7/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/7/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/14/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/14/changes/classes_index_changes.html
+http://developer.android.com/reference/com/google/android/gms/common/Scopes.html
+http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/16/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/15/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/15/changes/classes_index_changes.html
+http://developer.android.com/reference/com/google/android/gcm/server/Constants.html
+http://developer.android.com/reference/com/google/android/gcm/server/Message.html
+http://developer.android.com/reference/com/google/android/gcm/server/Message.Builder.html
+http://developer.android.com/reference/com/google/android/gcm/server/MulticastResult.html
+http://developer.android.com/reference/com/google/android/gcm/server/Result.html
+http://developer.android.com/reference/com/google/android/gcm/server/Sender.html
+http://developer.android.com/reference/com/google/android/gcm/server/InvalidRequestException.html
+http://developer.android.com/sdk/api_diff/15/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/15/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/13/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/13/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/7/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/7/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/14/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/14/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/14/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/14/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/14/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/15/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/15/changes/constructors_index_changes.html
+http://developer.android.com/resources/articles/creating-input-method.html
+http://developer.android.com/sdk/api_diff/17/changes/classes_index_removals.html
+http://developer.android.com/sdk/api_diff/17/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/17/changes/classes_index_changes.html
http://developer.android.com/sdk/api_diff/14/changes/fields_index_removals.html
http://developer.android.com/sdk/api_diff/14/changes/fields_index_additions.html
http://developer.android.com/sdk/api_diff/14/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/changes-summary.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?constant-values.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/5/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginList.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.NotificationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.TextPaint.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.Plugin.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginData.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.HandlerThread.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.IntentService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMStack.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_statistics.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/Constants.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_changes.html
http://developer.android.com/sdk/api_diff/10/changes/packages_index_additions.html
http://developer.android.com/sdk/api_diff/10/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_changes.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?overview-tree.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_changes.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?help-doc.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_changes.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/Message.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_changes.html
-http://developer.android.com/guide/developing/debugging/index.html
-http://developer.android.com/guide/developing/tools/adb.html
-http://developer.android.com/guide/publishing/app-signing.html
-http://developer.android.com/guide/developing/devices/managing-avds.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_changes.html
-http://developer.android.com/guide/google/gcm/client-javadoc/index.html?overview-tree.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/Message.Builder.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.DebugUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DialogFragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.EventLog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/12/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.TrafficStats.html
-http://developer.android.com/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Xml.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_changes.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/Sender.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_statistics.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?com/google/android/gcm/server/Result.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?serialized-form.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.sip.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_changes.html
-http://developer.android.com/resources/samples/Support4Demos/index.html
-http://developer.android.com/resources/samples/Support13Demos/index.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_changes.html
+http://developer.android.com/tools/debug-tasks.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/16/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/classes_index_changes.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_removals.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_additions.html
http://developer.android.com/sdk/api_diff/3/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_all.html
-http://developer.android.com/guide/google/gcm/server-javadoc/index.html?deprecated-list.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Document.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/16/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/16/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/15/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/10/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/10/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/jdiff_topleftframe.html
+http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/changes-summary.html
+http://developer.android.com/sdk/api_diff/14/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/14/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/6/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/5/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/10/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/10/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/6/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/13/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/13/changes/methods_index_changes.html
+http://developer.android.com/guide/faq/index.html
+http://developer.android.com/sdk/api_diff/8/changes/jdiff_statistics.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.accounts.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.app.html
@@ -6283,130 +6547,204 @@
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.view.animation.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.webkit.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Matcher.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.ArrayList.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/java.nio.charset.Charset.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.Gesture.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Node.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Pattern.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.anim.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.SyncResult.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Element.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.util.EventLogTags.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Text.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.HashMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.TabWidget.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_java.net.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_java.nio.charset.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.regex.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.html
http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
-http://developer.android.com/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
+http://developer.android.com/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Matcher.html
+http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Pattern.html
+http://developer.android.com/sdk/api_diff/8/changes/android.webkit.CacheManager.html
http://developer.android.com/sdk/api_diff/8/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/8/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
+http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebSettings.html
+http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebView.html
+http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
+http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/16/changes/constructors_index_removals.html
+http://developer.android.com/sdk/api_diff/16/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/16/changes/constructors_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.Activity.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.AlarmManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.Dialog.html
+http://developer.android.com/sdk/api_diff/8/changes/android.app.SearchManager.html
+http://developer.android.com/sdk/api_diff/15/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/15/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/6/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.ComponentName.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.ContentResolver.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.Context.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.ContextWrapper.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.Intent.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.SyncResult.html
+http://developer.android.com/sdk/api_diff/8/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/8/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/6/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/fields_index_removals.html
+http://developer.android.com/sdk/api_diff/8/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/8/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.MotionEvent.html
+http://developer.android.com/sdk/api_diff/8/changes/android.media.AudioManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
+http://developer.android.com/sdk/api_diff/8/changes/android.Manifest.permission.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
+http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
+http://developer.android.com/sdk/api_diff/8/changes/android.R.id.html
+http://developer.android.com/sdk/api_diff/8/changes/android.R.anim.html
+http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.Zygote.html
+http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.Environment.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Node.html
+http://developer.android.com/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
+http://developer.android.com/sdk/api_diff/8/changes/android.R.attr.html
+http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.Browser.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
+http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
+http://developer.android.com/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.System.html
+http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
+http://developer.android.com/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
+http://developer.android.com/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.location.LocationManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.media.ExifInterface.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
+http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Sensor.html
+http://developer.android.com/sdk/api_diff/8/changes/android.content.res.Configuration.html
+http://developer.android.com/sdk/api_diff/8/changes/android.util.EventLogTags.html
http://developer.android.com/sdk/api_diff/8/changes/android.util.Log.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.Bundle.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.Debug.html
+http://developer.android.com/sdk/api_diff/8/changes/android.os.PowerManager.html
+http://developer.android.com/sdk/api_diff/10/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/9/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/9/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/6/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
http://developer.android.com/sdk/api_diff/8/changes/android.opengl.Matrix.html
+http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/android.widget.AbsListView.html
+http://developer.android.com/sdk/api_diff/8/changes/android.accounts.AccountManager.html
+http://developer.android.com/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
+http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.html
+http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Document.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.animation.Animation.html
+http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
+http://developer.android.com/sdk/api_diff/8/changes/java.util.ArrayList.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
+http://developer.android.com/sdk/api_diff/8/changes/android.media.SoundPool.html
+http://developer.android.com/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
+http://developer.android.com/sdk/api_diff/8/changes/java.nio.charset.Charset.html
+http://developer.android.com/sdk/api_diff/8/changes/android.gesture.Gesture.html
+http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
+http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
+http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
+http://developer.android.com/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
+http://developer.android.com/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.View.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.Display.html
+http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
+http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Element.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.GestureDetector.html
+http://developer.android.com/sdk/api_diff/8/changes/android.widget.ListView.html
+http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockContext.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
+http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
+http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
+http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Text.html
+http://developer.android.com/sdk/api_diff/8/changes/android.view.VelocityTracker.html
+http://developer.android.com/sdk/api_diff/8/changes/java.util.HashMap.html
+http://developer.android.com/sdk/api_diff/8/changes/android.widget.ImageView.html
+http://developer.android.com/sdk/api_diff/8/changes/android.widget.TabWidget.html
http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaRecorder.html
http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
-http://developer.android.com/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.PowerManager.html
http://developer.android.com/sdk/api_diff/8/changes/android.widget.RemoteViews.html
http://developer.android.com/sdk/api_diff/8/changes/android.widget.VideoView.html
http://developer.android.com/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Sensor.html
http://developer.android.com/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_changes.html
http://developer.android.com/sdk/api_diff/8/changes/constructors_index_removals.html
http://developer.android.com/sdk/api_diff/8/changes/constructors_index_additions.html
http://developer.android.com/sdk/api_diff/8/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/8/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/8/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/12/changes/packages_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/classes_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/constructors_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/methods_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/fields_index_all.html
+http://developer.android.com/sdk/api_diff/12/changes/packages_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/packages_index_changes.html
+http://developer.android.com/sdk/api_diff/12/changes/fields_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/fields_index_changes.html
+http://developer.android.com/sdk/api_diff/12/changes/classes_index_removals.html
+http://developer.android.com/sdk/api_diff/12/changes/classes_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/classes_index_changes.html
+http://developer.android.com/sdk/api_diff/7/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/methods_index_removals.html
+http://developer.android.com/sdk/api_diff/12/changes/methods_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/methods_index_changes.html
+http://developer.android.com/sdk/api_diff/12/changes/constructors_index_removals.html
+http://developer.android.com/sdk/api_diff/12/changes/constructors_index_additions.html
+http://developer.android.com/sdk/api_diff/12/changes/constructors_index_changes.html
+http://developer.android.com/guide/faq/framework.html
+http://developer.android.com/guide/faq/licensingandoss.html
+http://developer.android.com/guide/faq/security.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_removals.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_additions.html
+http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_changes.html
http://developer.android.com/sdk/api_diff/8/changes/methods_index_removals.html
http://developer.android.com/sdk/api_diff/8/changes/methods_index_additions.html
http://developer.android.com/sdk/api_diff/8/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_changes.html
\ No newline at end of file
diff --git a/docs/html/tools/extras/oem-usb.jd b/docs/html/tools/extras/oem-usb.jd
index f7aa192..005ba29 100644
--- a/docs/html/tools/extras/oem-usb.jd
+++ b/docs/html/tools/extras/oem-usb.jd
@@ -311,8 +311,8 @@
href="http://k-tai.sharp.co.jp/support/">http://k-tai.sharp.co.jp/support/</a></td>
</tr><tr><td>SK Telesys</td> <td><a
href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/wDownload.jsp</a></td></tr><tr>
-<td>Sony Ericsson</td> <td><a
-href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en">http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en</a></td></tr>
+<td>Sony Mobile Communications</td> <td><a
+href="http://developer.sonymobile.com/downloads/drivers/">http://developer.sonymobile.com/downloads/drivers/</a></td></tr>
<tr><td>Teleepoch</td> <td><a
href="http://www.teleepoch.com/android.html">http://www.teleepoch.com/android.html</a></td>
diff --git a/docs/html/tools/testing/testing_ui.jd b/docs/html/tools/testing/testing_ui.jd
index 2a4b08d..5289ffa 100644
--- a/docs/html/tools/testing/testing_ui.jd
+++ b/docs/html/tools/testing/testing_ui.jd
@@ -123,7 +123,7 @@
<p>Before using the {@code uiautomator} testing framework, complete these pre-flight tasks:
</p>
<h3 id="loading">Load the application to a device</h3>
-<p>If you are reading this document, chances are that the Android application that you want to test has not been published yet. If you have a copy of the APK file, you can install the APK onto a test device by using the {@code adb} tool. To learn how to install an APK file using the {@code adb} tool, see the <a href="@docRoot}/tools/help/adb.html#move">{@code adb}</a> documentation. </p>
+<p>If you are reading this document, chances are that the Android application that you want to test has not been published yet. If you have a copy of the APK file, you can install the APK onto a test device by using the {@code adb} tool. To learn how to install an APK file using the {@code adb} tool, see the <a href="{@docRoot}tools/help/adb.html#move">{@code adb}</a> documentation. </p>
<h3 id="identifyUI">Identify the application’s UI components</h3>
<p>Before writing your {@code uiautomator} tests, first identify the UI components in the application that you want to test. Typically, good candidates for testing are UI components that are visible and that users can interact with. The UI components should also have visible text labels, <a href="{@docRoot}reference/android/view/View.html#attr_android:contentDescription">{@code android:contentDescription}</a> values, or both.
@@ -173,7 +173,7 @@
<dl>
<DT><a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a></DT>
<dd><p>Represents the device state. In your tests, you can call methods on the <a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a> instance to check for the state of various properties, such as current orientation or display size. Your tests also can use the <a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a> instance to perform device level actions, such as forcing the device into a specific rotation, pressing the d-pad hardware button, or pressing the Home and Menu buttons.</p>
-<p>To get an instance of <a href="{@docRoot}tools/help/UiDevice.html">{@code UiDevice}</a> and simulate a Home button press:
+<p>To get an instance of <a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a> and simulate a Home button press:
<pre>
getUiDevice().pressHome();
</pre></p></dd>
@@ -213,7 +213,7 @@
</dd>
<dt><a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a></dt>
-<dd>Represents a collection of items, for example songs in a music album or a list of emails in an inbox. Similar to a <a href="{@docRoot}tools/help/uiautomator/UiObject.html">{@code UiObject}</a>, you construct a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> instance by specifying a <a href="{@docRoot}tools/help/UiSelector.html">{@code UiSelector}</a>. The <a href="{@docRoot}tools/help/uiautomator/UiSelector.html">{@code UiSelector}</a> for a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> should search for a UI element that is a container or wrapper of other child UI elements (such as a layout view that contains child UI elements). For example, the following code snippet shows how to construct a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> to represent a video album that is displayed within a {@link android.widget.FrameLayout}:
+<dd>Represents a collection of items, for example songs in a music album or a list of emails in an inbox. Similar to a <a href="{@docRoot}tools/help/uiautomator/UiObject.html">{@code UiObject}</a>, you construct a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> instance by specifying a <a href="{@docRoot}tools/help/uiautomator/UiSelector.html">{@code UiSelector}</a>. The <a href="{@docRoot}tools/help/uiautomator/UiSelector.html">{@code UiSelector}</a> for a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> should search for a UI element that is a container or wrapper of other child UI elements (such as a layout view that contains child UI elements). For example, the following code snippet shows how to construct a <a href="{@docRoot}tools/help/uiautomator/UiCollection.html">{@code UiCollection}</a> to represent a video album that is displayed within a {@link android.widget.FrameLayout}:
<pre>
UiCollection videos = new UiCollection(new UiSelector()
.className("android.widget.FrameLayout"));
diff --git a/docs/html/training/basics/data-storage/databases.jd b/docs/html/training/basics/data-storage/databases.jd
index 3a717dd..8b11983 100644
--- a/docs/html/training/basics/data-storage/databases.jd
+++ b/docs/html/training/basics/data-storage/databases.jd
@@ -288,7 +288,7 @@
// Specify arguments in placeholder order.
String[] selelectionArgs = { String.valueOf(rowId) };
// Issue SQL statement.
-db.delete(table_name, mySelection, selectionArgs);
+db.delete(table_name, selection, selectionArgs);
</pre>
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index 7866083..999d399 100644
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -52,7 +52,27 @@
<dd>The <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a> describes
the fundamental characteristics of the app and defines each of
its components. You'll learn about various declarations in this file as you read more training
-classes.</dd>
+classes.
+ <p>One of the most important elements your manifest should include is the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+element. This declares your app's compatibility with different Android versions using 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#target">{@code android:targetSdkVersion}</a>
+attributes. For your first app, it should look like this:</p>
+<pre>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
+ <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
+ ...
+</manifest>
+</pre>
+<p>You should always set the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code android:targetSdkVersion}</a>
+as high as possible and test your app on the corresponding platform version. For more information,
+read <a href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
+Platform Versions</a>.</p>
+
+ </dd>
<dt><code>src/</code></dt>
<dd>Directory for your app's main source files. By default, it includes an {@link
android.app.Activity} class that runs when your app is launched using the app icon.</dd>
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index 8943c9d..65f22901 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -249,16 +249,29 @@
Keep this one the way it is.</li>
</ul>
-<p>The class should look like this:</p>
+<p>Because the {@link android.app.ActionBar} APIs are available only on {@link
+android.os.Build.VERSION_CODES#HONEYCOMB} (API level 11) and higher, you must add a condition
+around the {@link android.app.Activity#getActionBar()} method to check the current platform version.
+Additionally, you must add the {@code @SuppressLint("NewApi")} tag to the
+{@link android.app.Activity#onCreate onCreate()} method to avoid <a
+href="{@docRoot}tools/help/lint.html">lint</a> errors.</p>
+
+<p>The {@code DisplayMessageActivity} class should now look like this:</p>
<pre>
public class DisplayMessageActivity extends Activity {
+
+ @SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_message);
- // Show the Up button in the action bar.
- getActionBar().setDisplayHomeAsUpEnabled(true);
+
+ // Make sure we're running on Honeycomb or higher to use ActionBar APIs
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
+ // Show the Up button in the action bar.
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ }
}
@Override
diff --git a/docs/html/training/basics/fragments/support-lib.jd b/docs/html/training/basics/fragments/support-lib.jd
index ba10b78..cc867d3 100644
--- a/docs/html/training/basics/fragments/support-lib.jd
+++ b/docs/html/training/basics/fragments/support-lib.jd
@@ -12,7 +12,7 @@
<div id="tb">
<h2>This lesson teaches you to</h2>
<ol>
- <li><a href="#Setup">Set Up Your Project With the Support Library</a></li>
+ <li><a href="#Setup">Set Up Your Project with the Support Library</a></li>
<li><a href="#Apis">Import the Support Library APIs</a></li>
</ol>
<h2>You should also read</h2>
@@ -23,7 +23,7 @@
</div>
<p>The Android <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> provides a JAR
-file with an API library that allow you to use some of the more recent Android APIs in your app
+file with an API library that allows you to use some of the more recent Android APIs in your app
while running on earlier versions of Android. For instance, the Support Library provides a version
of the {@link android.app.Fragment} APIs that you can use on Android 1.6 (API level 4) and
higher.</p>
@@ -32,7 +32,7 @@
to build a dynamic app UI.</p>
-<h2 id="Setup">Set Up Your Project With the Support Library</h2>
+<h2 id="Setup">Set Up Your Project with the Support Library</h2>
<div class="figure" style="width:527px">
<img src="{@docRoot}images/training/basics/sdk-manager.png" alt="" />
@@ -43,7 +43,7 @@
<p>To set up your project:</p>
<ol>
- <li>Downlad the Android Support package using the SDK Manager</li>
+ <li>Download the Android Support package using the SDK Manager.</li>
<li>Create a <code>libs</code> directory at the top level of your Android project.</li>
<li>Locate the JAR file for the library you want to use and copy it into the <code>libs/</code>
diff --git a/docs/html/training/connect-devices-wirelessly/nsd.jd b/docs/html/training/connect-devices-wirelessly/nsd.jd
index d2b01a1..30f5c49 100644
--- a/docs/html/training/connect-devices-wirelessly/nsd.jd
+++ b/docs/html/training/connect-devices-wirelessly/nsd.jd
@@ -28,9 +28,9 @@
<h2>Try it out</h2>
<div class="download-box">
- <a href="{@docRoot}shareables/training/nsdchat.zip" class="button">Download
+ <a href="{@docRoot}shareables/training/NsdChat.zip" class="button">Download
the sample app</a>
- <p class="filename">nsdchat.zip</p>
+ <p class="filename">NsdChat.zip</p>
</div>
</p>
diff --git a/docs/html/training/connect-devices-wirelessly/wifi-direct.jd b/docs/html/training/connect-devices-wirelessly/wifi-direct.jd
index 99bb243..b8ed664 100644
--- a/docs/html/training/connect-devices-wirelessly/wifi-direct.jd
+++ b/docs/html/training/connect-devices-wirelessly/wifi-direct.jd
@@ -263,7 +263,7 @@
// asynchronous call and the calling activity is notified with a
// callback on PeerListListener.onPeersAvailable()
if (mManager != null) {
- mManager.requestPeers(mChannel, peerListener);
+ mManager.requestPeers(mChannel, peerListListener);
}
Log.d(WiFiDirectActivity.TAG, "P2P peers changed");
}...
diff --git a/docs/html/training/custom-views/create-view.jd b/docs/html/training/custom-views/create-view.jd
index 674bcc9..b849cb3 100644
--- a/docs/html/training/custom-views/create-view.jd
+++ b/docs/html/training/custom-views/create-view.jd
@@ -68,8 +68,8 @@
<pre class="prettyprint">
class PieChart extends View {
- public PieChart(Context ctx, AttributeSet attrs) {
- super(ctx, attrs);
+ public PieChart(Context context, AttributeSet attrs) {
+ super(context, attrs);
}
}
</pre>
@@ -104,7 +104,7 @@
</p>
<pre>
-<resources>;
+<resources>
<declare-styleable name="PieChart">
<attr name="showText" format="boolean" />
<attr name="labelPosition" format="enum">
@@ -189,8 +189,8 @@
reads its attributes:</p>
<pre>
-public PieChart(Context ctx, AttributeSet attrs) {
- super(ctx, attrs);
+public PieChart(Context context, AttributeSet attrs) {
+ super(context, attrs);
TypedArray a = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.PieChart,
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 060f526..20e716c 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -171,7 +171,8 @@
PIXEL_LA (9),
PIXEL_RGB (10),
PIXEL_RGBA (11),
- PIXEL_DEPTH (12);
+ PIXEL_DEPTH (12),
+ PIXEL_YUV(13);
int mID;
DataKind(int id) {
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 900720a..fa115ff 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -240,10 +240,10 @@
rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
}
- native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
- synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
+ native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
+ synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
validate();
- return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
+ return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
}
native void rsnTypeGetNativeData(int con, int id, int[] typeData);
synchronized void nTypeGetNativeData(int id, int[] typeData) {
diff --git a/graphics/java/android/renderscript/ScriptIntrinsic.java b/graphics/java/android/renderscript/ScriptIntrinsic.java
index f54943a..096268a 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsic.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsic.java
@@ -16,11 +16,6 @@
package android.renderscript;
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-
-
/**
* Base class for all Intrinsic scripts. An intrinsic a script
* which implements a pre-defined function. Intrinsics are
diff --git a/graphics/java/android/renderscript/ScriptIntrinsic3DLUT.java b/graphics/java/android/renderscript/ScriptIntrinsic3DLUT.java
new file mode 100644
index 0000000..24af6ea
--- /dev/null
+++ b/graphics/java/android/renderscript/ScriptIntrinsic3DLUT.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.renderscript;
+
+import android.util.Log;
+
+/**
+ *
+ * @hide
+ **/
+public final class ScriptIntrinsic3DLUT extends ScriptIntrinsic {
+ private Allocation mLUT;
+ private Element mElement;
+
+ private ScriptIntrinsic3DLUT(int id, RenderScript rs, Element e) {
+ super(id, rs);
+ mElement = e;
+ }
+
+ /**
+ * Supported elements types are {@link Element#U8_4}
+ *
+ * The defaults tables are identity.
+ *
+ * @param rs The Renderscript context
+ * @param e Element type for intputs and outputs
+ *
+ * @return ScriptIntrinsic3DLUT
+ */
+ public static ScriptIntrinsic3DLUT create(RenderScript rs, Element e) {
+ int id = rs.nScriptIntrinsicCreate(8, e.getID(rs));
+
+ if (!e.isCompatible(Element.U8_4(rs))) {
+ throw new RSIllegalArgumentException("Element must be compatibile with uchar4.");
+ }
+
+ return new ScriptIntrinsic3DLUT(id, rs, e);
+ }
+
+ public void setLUT(Allocation lut) {
+ final Type t = lut.getType();
+
+ if (t.getZ() == 0) {
+ throw new RSIllegalArgumentException("LUT must be 3d.");
+ }
+
+ if (!t.getElement().isCompatible(mElement)) {
+ throw new RSIllegalArgumentException("LUT element type must match.");
+ }
+
+ mLUT = lut;
+ setVar(0, mLUT);
+ }
+
+
+ /**
+ * Invoke the kernel and apply the lookup to each cell of ain
+ * and copy to aout.
+ *
+ * @param ain Input allocation
+ * @param aout Output allocation
+ */
+ public void forEach(Allocation ain, Allocation aout) {
+ forEach(0, ain, aout, null);
+ }
+
+ /**
+ * Get a KernelID for this intrinsic kernel.
+ *
+ * @return Script.KernelID The KernelID object.
+ */
+ public Script.KernelID getKernelID() {
+ return createKernelID(0, 3, null, null);
+ }
+}
+
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
index cb458ba..b219978 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicColorMatrix.java
@@ -16,8 +16,6 @@
package android.renderscript;
-import android.content.Context;
-import android.content.res.Resources;
import android.util.Log;
/**
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
index 91efa02..b40ea84 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
@@ -16,8 +16,6 @@
package android.renderscript;
-import android.content.Context;
-import android.content.res.Resources;
import android.util.Log;
/**
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicLUT.java b/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
index 41bdd25..f5ca261 100644
--- a/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
+++ b/graphics/java/android/renderscript/ScriptIntrinsicLUT.java
@@ -16,8 +16,6 @@
package android.renderscript;
-import android.content.Context;
-import android.content.res.Resources;
import android.util.Log;
/**
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index b36aee2..cb12594 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -18,6 +18,8 @@
import java.lang.reflect.Field;
+
+import android.graphics.ImageFormat;
import android.util.Log;
/**
@@ -47,6 +49,7 @@
int mDimZ;
boolean mDimMipmaps;
boolean mDimFaces;
+ int mDimYuv;
int mElementCount;
Element mElement;
@@ -207,6 +210,7 @@
int mDimZ;
boolean mDimMipmaps;
boolean mDimFaces;
+ int mYuv;
Element mElement;
@@ -262,6 +266,25 @@
return this;
}
+ /**
+ * @hide
+ *
+ * only NV21, YV12. Enums from ImageFormat
+ */
+ public Builder setYuvFormat(int yuvFormat) {
+ switch (yuvFormat) {
+ case android.graphics.ImageFormat.NV21:
+ case android.graphics.ImageFormat.YV12:
+ break;
+
+ default:
+ throw new RSIllegalArgumentException("Only NV21 and YV12 are supported..");
+ }
+
+ mYuv = yuvFormat;
+ return this;
+ }
+
/**
* Validate structure and create a new type.
@@ -288,8 +311,14 @@
}
}
+ if (mYuv != 0) {
+ if ((mDimZ != 0) || mDimFaces || mDimMipmaps) {
+ throw new RSInvalidStateException("YUV only supports basic 2D.");
+ }
+ }
+
int id = mRS.nTypeCreate(mElement.getID(mRS),
- mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces);
+ mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces, mYuv);
Type t = new Type(id, mRS);
t.mElement = mElement;
t.mDimX = mDimX;
@@ -297,6 +326,7 @@
t.mDimZ = mDimZ;
t.mDimMipmaps = mDimMipmaps;
t.mDimFaces = mDimFaces;
+ t.mDimYuv = mYuv;
t.calcElementCount();
return t;
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 75c7903..54413b4 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -427,12 +427,12 @@
static int
nTypeCreate(JNIEnv *_env, jobject _this, RsContext con, RsElement eid,
- jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces)
+ jint dimx, jint dimy, jint dimz, jboolean mips, jboolean faces, jint yuv)
{
- LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i)",
- con, eid, dimx, dimy, dimz, mips, faces);
+ LOG_API("nTypeCreate, con(%p) eid(%p), x(%i), y(%i), z(%i), mips(%i), faces(%i), yuv(%i)",
+ con, eid, dimx, dimy, dimz, mips, faces, yuv);
- jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces);
+ jint id = (jint)rsTypeCreate(con, (RsElement)eid, dimx, dimy, dimz, mips, faces, yuv);
return (jint)id;
}
@@ -1454,7 +1454,7 @@
{"rsnElementGetNativeData", "(II[I)V", (void*)nElementGetNativeData },
{"rsnElementGetSubElements", "(II[I[Ljava/lang/String;[I)V", (void*)nElementGetSubElements },
-{"rsnTypeCreate", "(IIIIIZZ)I", (void*)nTypeCreate },
+{"rsnTypeCreate", "(IIIIIZZI)I", (void*)nTypeCreate },
{"rsnTypeGetNativeData", "(II[I)V", (void*)nTypeGetNativeData },
{"rsnAllocationCreateTyped", "(IIIII)I", (void*)nAllocationCreateTyped },
diff --git a/keystore/java/android/security/package.html b/keystore/java/android/security/package.html
index 610cbf0..18cf4f2 100644
--- a/keystore/java/android/security/package.html
+++ b/keystore/java/android/security/package.html
@@ -2,8 +2,5 @@
<BODY>
<p>Provides access to a few facilities of the Android security
subsystems.</p>
- <p>For information on how to use this facility, see the <a
- href="{@docRoot}guide/topics/security/keystore.html">Android
- KeyStore facility</a> guide.</p>
</BODY>
</HTML>
\ No newline at end of file
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 7a38b40..06574cd 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -64,6 +64,7 @@
"DrawTextOnPath",
"DrawPosText",
"DrawText",
+ "DrawRects",
"ResetShader",
"SetupShader",
"ResetColorFilter",
@@ -633,6 +634,13 @@
text.text(), text.length(), count, paint);
}
break;
+ case DrawRects: {
+ int32_t count = 0;
+ float* rects = getFloats(count);
+ SkPaint* paint = getPaint(renderer);
+ ALOGD("%s%s %d, %p", (char*) indent, OP_NAMES[op], count / 4, paint);
+ }
+ break;
case ResetShader: {
ALOGD("%s%s", (char*) indent, OP_NAMES[op]);
}
@@ -1277,6 +1285,14 @@
x, y, positions, paint, length);
}
break;
+ case DrawRects: {
+ int32_t count = 0;
+ float* rects = getFloats(count);
+ SkPaint* paint = getPaint(renderer);
+ DISPLAY_LIST_LOGD("%s%s %d, %p", (char*) indent, OP_NAMES[op], count, paint);
+ drawGlStatus |= renderer.drawRects(rects, count / 4, paint);
+ }
+ break;
case ResetShader: {
DISPLAY_LIST_LOGD("%s%s", (char*) indent, OP_NAMES[op]);
renderer.resetShader();
@@ -1759,7 +1775,7 @@
paint->setAntiAlias(true);
SkPaint* addedPaint = addPaint(paint);
FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
- fontRenderer.precache(addedPaint, text, count);
+ fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
return DrawGlInfo::kStatusDone;
}
@@ -1773,7 +1789,7 @@
paint->setAntiAlias(true);
SkPaint* addedPaint = addPaint(paint);
FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
- fontRenderer.precache(addedPaint, text, count);
+ fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
return DrawGlInfo::kStatusDone;
}
@@ -1807,13 +1823,22 @@
SkPaint* addedPaint = addPaint(paint);
if (!reject) {
FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(addedPaint);
- fontRenderer.precache(addedPaint, text, count);
+ fontRenderer.precache(addedPaint, text, count, *mSnapshot->transform);
}
addFloat(length);
addSkip(location);
return DrawGlInfo::kStatusDone;
}
+status_t DisplayListRenderer::drawRects(const float* rects, int count, SkPaint* paint) {
+ if (count <= 0) return DrawGlInfo::kStatusDone;
+
+ addOp(DisplayList::DrawRects);
+ addFloats(rects, count * 4);
+ addPaint(paint);
+ return DrawGlInfo::kStatusDone;
+}
+
void DisplayListRenderer::resetShader() {
addOp(DisplayList::ResetShader);
}
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index e42def5..fb01753 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -106,6 +106,7 @@
DrawTextOnPath,
DrawPosText,
DrawText,
+ DrawRects,
ResetShader,
SetupShader,
ResetColorFilter,
@@ -608,6 +609,7 @@
const float* positions, SkPaint* paint);
virtual status_t drawText(const char* text, int bytesCount, int count,
float x, float y, const float* positions, SkPaint* paint, float length);
+ virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
virtual void resetShader();
virtual void setupShader(SkiaShader* shader);
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 47784a4..5c1eb38 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -36,7 +36,9 @@
static bool sLogFontRendererCreate = true;
-FontRenderer::FontRenderer() {
+FontRenderer::FontRenderer() :
+ mActiveFonts(LruCache<Font::FontDescription, Font*>::kUnlimitedCapacity) {
+
if (sLogFontRendererCreate) {
INIT_LOGD("Creating FontRenderer");
}
@@ -107,10 +109,11 @@
delete[] mTextMesh;
}
- Vector<Font*> fontsToDereference = mActiveFonts;
- for (uint32_t i = 0; i < fontsToDereference.size(); i++) {
- delete fontsToDereference[i];
+ LruCache<Font::FontDescription, Font*>::Iterator it(mActiveFonts);
+ while (it.next()) {
+ delete it.value();
}
+ mActiveFonts.clear();
}
void FontRenderer::flushAllAndInvalidate() {
@@ -118,8 +121,9 @@
issueDrawCommand();
}
- for (uint32_t i = 0; i < mActiveFonts.size(); i++) {
- mActiveFonts[i]->invalidateTextureCache();
+ LruCache<Font::FontDescription, Font*>::Iterator it(mActiveFonts);
+ while (it.next()) {
+ it.value()->invalidateTextureCache();
}
for (uint32_t i = 0; i < mCacheTextures.size(); i++) {
@@ -146,8 +150,9 @@
CacheTexture* cacheTexture = mCacheTextures[i];
if (cacheTexture->getTexture()) {
cacheTexture->init();
- for (uint32_t j = 0; j < mActiveFonts.size(); j++) {
- mActiveFonts[j]->invalidateTextureCache(cacheTexture);
+ LruCache<Font::FontDescription, Font*>::Iterator it(mActiveFonts);
+ while (it.next()) {
+ it.value()->invalidateTextureCache(cacheTexture);
}
cacheTexture->releaseTexture();
}
@@ -480,22 +485,8 @@
}
}
-void FontRenderer::setFont(SkPaint* paint, uint32_t fontId, float fontSize) {
- int flags = 0;
- if (paint->isFakeBoldText()) {
- flags |= Font::kFakeBold;
- }
-
- const float skewX = paint->getTextSkewX();
- uint32_t italicStyle = *(uint32_t*) &skewX;
- const float scaleXFloat = paint->getTextScaleX();
- uint32_t scaleX = *(uint32_t*) &scaleXFloat;
- SkPaint::Style style = paint->getStyle();
- const float strokeWidthFloat = paint->getStrokeWidth();
- uint32_t strokeWidth = *(uint32_t*) &strokeWidthFloat;
- mCurrentFont = Font::create(this, fontId, fontSize, flags, italicStyle,
- scaleX, style, strokeWidth);
-
+void FontRenderer::setFont(SkPaint* paint, const mat4& matrix) {
+ mCurrentFont = Font::create(this, paint, matrix);
}
FontRenderer::DropShadow FontRenderer::renderDropShadow(SkPaint* paint, const char *text,
@@ -561,39 +552,11 @@
}
}
-void FontRenderer::precache(SkPaint* paint, const char* text, int numGlyphs) {
- int flags = 0;
- if (paint->isFakeBoldText()) {
- flags |= Font::kFakeBold;
- }
- const float skewX = paint->getTextSkewX();
- uint32_t italicStyle = *(uint32_t*) &skewX;
- const float scaleXFloat = paint->getTextScaleX();
- uint32_t scaleX = *(uint32_t*) &scaleXFloat;
- SkPaint::Style style = paint->getStyle();
- const float strokeWidthFloat = paint->getStrokeWidth();
- uint32_t strokeWidth = *(uint32_t*) &strokeWidthFloat;
- float fontSize = paint->getTextSize();
- Font* font = Font::create(this, SkTypeface::UniqueID(paint->getTypeface()),
- fontSize, flags, italicStyle, scaleX, style, strokeWidth);
-
+void FontRenderer::precache(SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix) {
+ Font* font = Font::create(this, paint, matrix);
font->precache(paint, text, numGlyphs);
}
-bool FontRenderer::renderText(SkPaint* paint, const Rect* clip, const char *text,
- uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, Rect* bounds) {
- if (!mCurrentFont) {
- ALOGE("No font set");
- return false;
- }
-
- initRender(clip, bounds);
- mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y);
- finishRender();
-
- return mDrawn;
-}
-
bool FontRenderer::renderPosText(SkPaint* paint, const Rect* clip, const char *text,
uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y,
const float* positions, Rect* bounds) {
@@ -625,12 +588,7 @@
}
void FontRenderer::removeFont(const Font* font) {
- for (uint32_t ct = 0; ct < mActiveFonts.size(); ct++) {
- if (mActiveFonts[ct] == font) {
- mActiveFonts.removeAt(ct);
- break;
- }
- }
+ mActiveFonts.remove(font->getDescription());
if (mCurrentFont == font) {
mCurrentFont = NULL;
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 09a3c25..3964bca 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -17,6 +17,7 @@
#ifndef ANDROID_HWUI_FONT_RENDERER_H
#define ANDROID_HWUI_FONT_RENDERER_H
+#include <utils/LruCache.h>
#include <utils/Vector.h>
#include <SkPaint.h>
@@ -27,6 +28,7 @@
#include "font/CacheTexture.h"
#include "font/CachedGlyphInfo.h"
#include "font/Font.h"
+#include "Matrix.h"
#include "Properties.h"
namespace android {
@@ -47,14 +49,11 @@
mGammaTable = gammaTable;
}
- void setFont(SkPaint* paint, uint32_t fontId, float fontSize);
+ void setFont(SkPaint* paint, const mat4& matrix);
- void precache(SkPaint* paint, const char* text, int numGlyphs);
+ void precache(SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix);
// bounds is an out parameter
- bool renderText(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
- uint32_t len, int numGlyphs, int x, int y, Rect* bounds);
- // bounds is an out parameter
bool renderPosText(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
uint32_t len, int numGlyphs, int x, int y, const float* positions, Rect* bounds);
// bounds is an out parameter
@@ -153,7 +152,7 @@
Vector<CacheTexture*> mCacheTextures;
Font* mCurrentFont;
- Vector<Font*> mActiveFonts;
+ LruCache<Font::FontDescription, Font*> mActiveFonts;
CacheTexture* mCurrentCacheTexture;
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index 35a8487..154c0ec 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -49,7 +49,6 @@
hash_t GradientCacheEntry::hash() const {
uint32_t hash = JenkinsHashMix(0, count);
- hash = JenkinsHashMix(hash, tileMode);
for (uint32_t i = 0; i < count; i++) {
hash = JenkinsHashMix(hash, android::hash_type(colors[i]));
hash = JenkinsHashMix(hash, android::hash_type(positions[i]));
@@ -61,9 +60,6 @@
int deltaInt = int(lhs.count) - int(rhs.count);
if (deltaInt != 0) return deltaInt;
- deltaInt = lhs.tileMode - rhs.tileMode;
- if (deltaInt != 0) return deltaInt;
-
deltaInt = memcmp(lhs.colors, rhs.colors, lhs.count * sizeof(uint32_t));
if (deltaInt != 0) return deltaInt;
@@ -127,9 +123,7 @@
if (texture) {
const uint32_t size = texture->width * texture->height * GRADIENT_BYTES_PER_PIXEL;
mSize -= size;
- }
- if (texture) {
glDeleteTextures(1, &texture->id);
delete texture;
}
@@ -140,7 +134,6 @@
///////////////////////////////////////////////////////////////////////////////
Texture* GradientCache::get(uint32_t* colors, float* positions, int count) {
-
GradientCacheEntry gradient(colors, positions, count);
Texture* texture = mCache.get(gradient);
@@ -189,7 +182,7 @@
// Asume the cache is always big enough
const uint32_t size = texture->width * texture->height * GRADIENT_BYTES_PER_PIXEL;
- while (mSize + size > mMaxSize) {
+ while (getSize() + size > mMaxSize) {
mCache.removeOldest();
}
diff --git a/libs/hwui/GradientCache.h b/libs/hwui/GradientCache.h
index d183a85..7dc5b8a 100644
--- a/libs/hwui/GradientCache.h
+++ b/libs/hwui/GradientCache.h
@@ -76,10 +76,8 @@
uint32_t* colors;
float* positions;
uint32_t count;
- SkShader::TileMode tileMode;
private:
-
void copy(uint32_t* colors, float* positions, uint32_t count) {
this->count = count;
this->colors = new uint32_t[count];
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index ce74cee..cfc5b04 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -67,6 +67,14 @@
// Caching
///////////////////////////////////////////////////////////////////////////////
+int LayerCache::LayerEntry::compare(const LayerCache::LayerEntry& lhs,
+ const LayerCache::LayerEntry& rhs) {
+ int deltaInt = int(lhs.mWidth) - int(rhs.mWidth);
+ if (deltaInt != 0) return deltaInt;
+
+ return int(lhs.mHeight) - int(rhs.mHeight);
+}
+
void LayerCache::deleteLayer(Layer* layer) {
if (layer) {
LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(),
diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h
index fd698e2..fc2cd91 100644
--- a/libs/hwui/LayerCache.h
+++ b/libs/hwui/LayerCache.h
@@ -102,9 +102,6 @@
*/
void dump();
-private:
- void deleteLayer(Layer* layer);
-
struct LayerEntry {
LayerEntry():
mLayer(NULL), mWidth(0), mHeight(0) {
@@ -119,15 +116,14 @@
mLayer(layer), mWidth(layer->getWidth()), mHeight(layer->getHeight()) {
}
- bool operator<(const LayerEntry& rhs) const {
- if (mWidth == rhs.mWidth) {
- return mHeight < rhs.mHeight;
- }
- return mWidth < rhs.mWidth;
+ static int compare(const LayerEntry& lhs, const LayerEntry& rhs);
+
+ bool operator==(const LayerEntry& other) const {
+ return compare(*this, other) == 0;
}
- bool operator==(const LayerEntry& rhs) const {
- return mWidth == rhs.mWidth && mHeight == rhs.mHeight;
+ bool operator!=(const LayerEntry& other) const {
+ return compare(*this, other) != 0;
}
Layer* mLayer;
@@ -135,12 +131,24 @@
uint32_t mHeight;
}; // struct LayerEntry
+private:
+ void deleteLayer(Layer* layer);
+
SortedList<LayerEntry> mCache;
uint32_t mSize;
uint32_t mMaxSize;
}; // class LayerCache
+inline int strictly_order_type(const LayerCache::LayerEntry& lhs,
+ const LayerCache::LayerEntry& rhs) {
+ return LayerCache::LayerEntry::compare(lhs, rhs) < 0;
+}
+
+inline int compare_type(const LayerCache::LayerEntry& lhs, const LayerCache::LayerEntry& rhs) {
+ return LayerCache::LayerEntry::compare(lhs, rhs);
+}
+
}; // namespace uirenderer
}; // namespace android
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index c7a2014..8cda729 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -183,14 +183,7 @@
updateLayers();
- // If we know that we are going to redraw the entire framebuffer,
- // perform a discard to let the driver know we don't need to preserve
- // the back buffer for this frame.
- if (mCaches.extensions.hasDiscardFramebuffer() &&
- left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) {
- const GLenum attachments[] = { getTargetFbo() == 0 ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0 };
- glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments);
- }
+ discardFramebuffer(left, top, right, bottom);
syncState();
@@ -207,6 +200,18 @@
return clear(left, top, right, bottom, opaque);
}
+void OpenGLRenderer::discardFramebuffer(float left, float top, float right, float bottom) {
+ // If we know that we are going to redraw the entire framebuffer,
+ // perform a discard to let the driver know we don't need to preserve
+ // the back buffer for this frame.
+ if (mCaches.extensions.hasDiscardFramebuffer() &&
+ left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) {
+ const GLenum attachments[] = { getTargetFbo() == 0 ? (const GLenum) GL_COLOR_EXT :
+ (const GLenum) GL_COLOR_ATTACHMENT0 };
+ glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments);
+ }
+}
+
status_t OpenGLRenderer::clear(float left, float top, float right, float bottom, bool opaque) {
if (!opaque) {
mCaches.enableScissor();
@@ -1249,7 +1254,8 @@
return !clip.intersects(transformed);
}
-bool OpenGLRenderer::quickRejectPreStroke(float left, float top, float right, float bottom, SkPaint* paint) {
+bool OpenGLRenderer::quickRejectPreStroke(float left, float top, float right, float bottom,
+ SkPaint* paint) {
if (paint->getStyle() != SkPaint::kFill_Style) {
float outset = paint->getStrokeWidth() * 0.5f;
return quickReject(left - outset, top - outset, right + outset, bottom + outset);
@@ -1335,30 +1341,20 @@
mDescription.pointSize = pointSize;
}
-void OpenGLRenderer::setupDrawColor(int color) {
- setupDrawColor(color, (color >> 24) & 0xFF);
-}
-
void OpenGLRenderer::setupDrawColor(int color, int alpha) {
mColorA = alpha / 255.0f;
- // Second divide of a by 255 is an optimization, allowing us to simply multiply
- // the rgb values by a instead of also dividing by 255
- const float a = mColorA / 255.0f;
- mColorR = a * ((color >> 16) & 0xFF);
- mColorG = a * ((color >> 8) & 0xFF);
- mColorB = a * ((color ) & 0xFF);
+ mColorR = mColorA * ((color >> 16) & 0xFF) / 255.0f;
+ mColorG = mColorA * ((color >> 8) & 0xFF) / 255.0f;
+ mColorB = mColorA * ((color ) & 0xFF) / 255.0f;
mColorSet = true;
mSetShaderColor = mDescription.setColor(mColorR, mColorG, mColorB, mColorA);
}
void OpenGLRenderer::setupDrawAlpha8Color(int color, int alpha) {
mColorA = alpha / 255.0f;
- // Double-divide of a by 255 is an optimization, allowing us to simply multiply
- // the rgb values by a instead of also dividing by 255
- const float a = mColorA / 255.0f;
- mColorR = a * ((color >> 16) & 0xFF);
- mColorG = a * ((color >> 8) & 0xFF);
- mColorB = a * ((color ) & 0xFF);
+ mColorR = mColorA * ((color >> 16) & 0xFF) / 255.0f;
+ mColorG = mColorA * ((color >> 8) & 0xFF) / 255.0f;
+ mColorB = mColorA * ((color ) & 0xFF) / 255.0f;
mColorSet = true;
mSetShaderColor = mDescription.setAlpha8Color(mColorR, mColorG, mColorB, mColorA);
}
@@ -1620,43 +1616,27 @@
SkXfermode::Mode mode;
getAlphaAndMode(paint, &alpha, &mode);
+ int color = paint != NULL ? paint->getColor() : 0;
+
float x = left;
float y = top;
- GLenum filter = GL_LINEAR;
+ texture->setWrap(GL_CLAMP_TO_EDGE, true);
+
bool ignoreTransform = false;
if (mSnapshot->transform->isPureTranslate()) {
x = (int) floorf(left + mSnapshot->transform->getTranslateX() + 0.5f);
y = (int) floorf(top + mSnapshot->transform->getTranslateY() + 0.5f);
ignoreTransform = true;
- filter = GL_NEAREST;
+
+ texture->setFilter(GL_NEAREST, true);
} else {
- filter = FILTER(paint);
+ texture->setFilter(FILTER(paint), true);
}
- setupDraw();
- setupDrawWithTexture(true);
- if (paint) {
- setupDrawAlpha8Color(paint->getColor(), alpha);
- }
- setupDrawColorFilter();
- setupDrawShader();
- setupDrawBlending(true, mode);
- setupDrawProgram();
- setupDrawModelView(x, y, x + texture->width, y + texture->height, ignoreTransform);
-
- setupDrawTexture(texture->id);
- texture->setWrap(GL_CLAMP_TO_EDGE);
- texture->setFilter(filter);
-
- setupDrawPureColorUniforms();
- setupDrawColorFilterUniforms();
- setupDrawShaderUniforms();
- setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset);
-
- glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
-
- finishDrawTexture();
+ drawAlpha8TextureMesh(x, y, x + texture->width, y + texture->height, texture->id,
+ paint != NULL, color, alpha, mode, (GLvoid*) NULL,
+ (GLvoid*) gMeshTextureOffset, GL_TRIANGLE_STRIP, gMeshCount, ignoreTransform);
}
status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
@@ -1699,7 +1679,11 @@
// to the vertex shader. The save/restore is a bit overkill.
save(SkCanvas::kMatrix_SaveFlag);
concatMatrix(matrix);
- drawTextureRect(0.0f, 0.0f, bitmap->width(), bitmap->height(), texture, paint);
+ if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+ drawAlphaBitmap(texture, 0.0f, 0.0f, paint);
+ } else {
+ drawTextureRect(0.0f, 0.0f, bitmap->width(), bitmap->height(), texture, paint);
+ }
restore();
return DrawGlInfo::kStatusDrew;
@@ -1717,7 +1701,11 @@
Texture* texture = mCaches.textureCache.getTransient(bitmap);
const AutoTexture autoCleanup(texture);
- drawTextureRect(left, top, right, bottom, texture, paint);
+ if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+ drawAlphaBitmap(texture, left, top, paint);
+ } else {
+ drawTextureRect(left, top, right, bottom, texture, paint);
+ }
return DrawGlInfo::kStatusDrew;
}
@@ -1728,7 +1716,6 @@
return DrawGlInfo::kStatusDone;
}
- // TODO: We should compute the bounding box when recording the display list
float left = FLT_MAX;
float top = FLT_MAX;
float right = FLT_MIN;
@@ -1766,7 +1753,6 @@
TextureVertex::set(vertex++, vertices[cx], vertices[cy], u2, v1);
TextureVertex::set(vertex++, vertices[dx], vertices[dy], u2, v2);
- // TODO: This could be optimized to avoid unnecessary ops
left = fminf(left, fminf(vertices[ax], fminf(vertices[bx], vertices[cx])));
top = fminf(top, fminf(vertices[ay], fminf(vertices[by], vertices[cy])));
right = fmaxf(right, fmaxf(vertices[ax], fmaxf(vertices[bx], vertices[cx])));
@@ -1831,26 +1817,59 @@
texture->setWrap(GL_CLAMP_TO_EDGE, true);
- if (CC_LIKELY(mSnapshot->transform->isPureTranslate())) {
- const float x = (int) floorf(dstLeft + mSnapshot->transform->getTranslateX() + 0.5f);
- const float y = (int) floorf(dstTop + mSnapshot->transform->getTranslateY() + 0.5f);
+ float scaleX = (dstRight - dstLeft) / (srcRight - srcLeft);
+ float scaleY = (dstBottom - dstTop) / (srcBottom - srcTop);
- GLenum filter = GL_NEAREST;
- // Enable linear filtering if the source rectangle is scaled
- if (srcRight - srcLeft != dstRight - dstLeft || srcBottom - srcTop != dstBottom - dstTop) {
- filter = FILTER(paint);
- }
+ bool scaled = scaleX != 1.0f || scaleY != 1.0f;
+ // Apply a scale transform on the canvas only when a shader is in use
+ // Skia handles the ratio between the dst and src rects as a scale factor
+ // when a shader is set
+ bool useScaleTransform = mShader && scaled;
+ bool ignoreTransform = false;
- texture->setFilter(filter, true);
- drawTextureMesh(x, y, x + (dstRight - dstLeft), y + (dstBottom - dstTop),
- texture->id, alpha / 255.0f, mode, texture->blend,
- &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
- GL_TRIANGLE_STRIP, gMeshCount, false, true);
+ if (CC_LIKELY(mSnapshot->transform->isPureTranslate() && !useScaleTransform)) {
+ float x = (int) floorf(dstLeft + mSnapshot->transform->getTranslateX() + 0.5f);
+ float y = (int) floorf(dstTop + mSnapshot->transform->getTranslateY() + 0.5f);
+
+ dstRight = x + (dstRight - dstLeft);
+ dstBottom = y + (dstBottom - dstTop);
+
+ dstLeft = x;
+ dstTop = y;
+
+ texture->setFilter(scaled ? FILTER(paint) : GL_NEAREST, true);
+ ignoreTransform = true;
} else {
texture->setFilter(FILTER(paint), true);
- drawTextureMesh(dstLeft, dstTop, dstRight, dstBottom, texture->id, alpha / 255.0f,
- mode, texture->blend, &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
- GL_TRIANGLE_STRIP, gMeshCount);
+ }
+
+ if (CC_UNLIKELY(useScaleTransform)) {
+ save(SkCanvas::kMatrix_SaveFlag);
+ translate(dstLeft, dstTop);
+ scale(scaleX, scaleY);
+
+ dstLeft = 0.0f;
+ dstTop = 0.0f;
+
+ dstRight = srcRight - srcLeft;
+ dstBottom = srcBottom - srcTop;
+ }
+
+ if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+ int color = paint ? paint->getColor() : 0;
+ drawAlpha8TextureMesh(dstLeft, dstTop, dstRight, dstBottom,
+ texture->id, paint != NULL, color, alpha, mode,
+ &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+ GL_TRIANGLE_STRIP, gMeshCount, ignoreTransform);
+ } else {
+ drawTextureMesh(dstLeft, dstTop, dstRight, dstBottom,
+ texture->id, alpha / 255.0f, mode, texture->blend,
+ &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+ GL_TRIANGLE_STRIP, gMeshCount, false, ignoreTransform);
+ }
+
+ if (CC_UNLIKELY(useScaleTransform)) {
+ restore();
}
resetDrawTextureTexCoords(0.0f, 0.0f, 1.0f, 1.0f);
@@ -2432,7 +2451,8 @@
}
// TODO: support fills (accounting for concavity if useCenter && sweepAngle > 180)
- if (p->getStyle() != SkPaint::kStroke_Style || p->getPathEffect() != 0 || p->getStrokeCap() != SkPaint::kButt_Cap || useCenter) {
+ if (p->getStyle() != SkPaint::kStroke_Style || p->getPathEffect() != 0 ||
+ p->getStrokeCap() != SkPaint::kButt_Cap || useCenter) {
mCaches.activeTexture(0);
const PathTexture* texture = mCaches.arcShapeCache.getArc(right - left, bottom - top,
startAngle, sweepAngle, useCenter, p);
@@ -2556,16 +2576,15 @@
}
FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
- fontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()),
- paint->getTextSize());
+ fontRenderer.setFont(paint, *mSnapshot->transform);
int alpha;
SkXfermode::Mode mode;
getAlphaAndMode(paint, &alpha, &mode);
if (CC_UNLIKELY(mHasShadow)) {
- drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, alpha, mode,
- 0.0f, 0.0f);
+ drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer,
+ alpha, mode, 0.0f, 0.0f);
}
// Pick the appropriate texture filtering
@@ -2634,6 +2653,14 @@
return DrawGlInfo::kStatusDone;
}
+#if DEBUG_GLYPHS
+ ALOGD("OpenGLRenderer drawText() with FontID=%d",
+ SkTypeface::UniqueID(paint->getTypeface()));
+#endif
+
+ FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
+ fontRenderer.setFont(paint, *mSnapshot->transform);
+
const float oldX = x;
const float oldY = y;
const bool pureTranslate = mSnapshot->transform->isPureTranslate();
@@ -2642,15 +2669,6 @@
y = (int) floorf(y + mSnapshot->transform->getTranslateY() + 0.5f);
}
-#if DEBUG_GLYPHS
- ALOGD("OpenGLRenderer drawText() with FontID=%d",
- SkTypeface::UniqueID(paint->getTypeface()));
-#endif
-
- FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
- fontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()),
- paint->getTextSize());
-
int alpha;
SkXfermode::Mode mode;
getAlphaAndMode(paint, &alpha, &mode);
@@ -2723,8 +2741,7 @@
}
FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
- fontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()),
- paint->getTextSize());
+ fontRenderer.setFont(paint, *mSnapshot->transform);
int alpha;
SkXfermode::Mode mode;
@@ -2768,7 +2785,6 @@
mCaches.activeTexture(0);
- // TODO: Perform early clip test before we rasterize the path
const PathTexture* texture = mCaches.pathCache.get(path, paint);
if (!texture) return DrawGlInfo::kStatusDone;
const AutoTexture autoCleanup(texture);
@@ -3025,6 +3041,76 @@
}
}
+status_t OpenGLRenderer::drawRects(const float* rects, int count, SkPaint* paint) {
+ if (mSnapshot->isIgnored()) {
+ return DrawGlInfo::kStatusDone;
+ }
+
+ float left = FLT_MAX;
+ float top = FLT_MAX;
+ float right = FLT_MIN;
+ float bottom = FLT_MIN;
+
+ int vertexCount = 0;
+ Vertex mesh[count * 6];
+ Vertex* vertex = mesh;
+
+ for (int i = 0; i < count; i++) {
+ int index = i * 4;
+ float l = rects[index + 0];
+ float t = rects[index + 1];
+ float r = rects[index + 2];
+ float b = rects[index + 3];
+
+ if (!quickRejectNoScissor(left, top, right, bottom)) {
+ Vertex::set(vertex++, l, b);
+ Vertex::set(vertex++, l, t);
+ Vertex::set(vertex++, r, t);
+ Vertex::set(vertex++, l, b);
+ Vertex::set(vertex++, r, t);
+ Vertex::set(vertex++, r, b);
+
+ vertexCount += 6;
+
+ left = fminf(left, l);
+ top = fminf(top, t);
+ right = fmaxf(right, r);
+ bottom = fmaxf(bottom, b);
+ }
+ }
+
+ if (count == 0) return DrawGlInfo::kStatusDone;
+
+ int color = paint->getColor();
+ // If a shader is set, preserve only the alpha
+ if (mShader) {
+ color |= 0x00ffffff;
+ }
+ SkXfermode::Mode mode = getXfermode(paint->getXfermode());
+
+ setupDraw();
+ setupDrawNoTexture();
+ setupDrawColor(color, ((color >> 24) & 0xFF) * mSnapshot->alpha);
+ setupDrawShader();
+ setupDrawColorFilter();
+ setupDrawBlending(mode);
+ setupDrawProgram();
+ setupDrawDirtyRegionsDisabled();
+ setupDrawModelView(0.0f, 0.0f, 1.0f, 1.0f);
+ setupDrawColorUniforms();
+ setupDrawShaderUniforms();
+ setupDrawColorFilterUniforms();
+ setupDrawVertices((GLvoid*) &mesh[0].position[0]);
+
+ if (hasLayer()) {
+ dirtyLayer(left, top, right, bottom, *mSnapshot->transform);
+ }
+
+ glDrawArrays(GL_TRIANGLES, 0, vertexCount);
+
+ return DrawGlInfo::kStatusDrew;
+}
+
void OpenGLRenderer::drawColorRect(float left, float top, float right, float bottom,
int color, SkXfermode::Mode mode, bool ignoreTransform) {
// If a shader is set, preserve only the alpha
@@ -3089,17 +3175,15 @@
setupDrawColorFilter();
setupDrawBlending(blend, mode, swapSrcDst);
setupDrawProgram();
- if (!dirty) {
- setupDrawDirtyRegionsDisabled();
- }
+ if (!dirty) setupDrawDirtyRegionsDisabled();
if (!ignoreScale) {
setupDrawModelView(left, top, right, bottom, ignoreTransform);
} else {
setupDrawModelViewTranslate(left, top, right, bottom, ignoreTransform);
}
+ setupDrawTexture(texture);
setupDrawPureColorUniforms();
setupDrawColorFilterUniforms();
- setupDrawTexture(texture);
setupDrawMesh(vertices, texCoords, vbo);
glDrawArrays(drawMode, 0, elementsCount);
@@ -3107,6 +3191,33 @@
finishDrawTexture();
}
+void OpenGLRenderer::drawAlpha8TextureMesh(float left, float top, float right, float bottom,
+ GLuint texture, bool hasColor, int color, int alpha, SkXfermode::Mode mode,
+ GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
+ bool ignoreTransform, bool dirty) {
+
+ setupDraw();
+ setupDrawWithTexture(true);
+ if (hasColor) {
+ setupDrawAlpha8Color(color, alpha);
+ }
+ setupDrawColorFilter();
+ setupDrawShader();
+ setupDrawBlending(true, mode);
+ setupDrawProgram();
+ if (!dirty) setupDrawDirtyRegionsDisabled();
+ setupDrawModelView(left, top, right, bottom, ignoreTransform);
+ setupDrawTexture(texture);
+ setupDrawPureColorUniforms();
+ setupDrawColorFilterUniforms();
+ setupDrawShaderUniforms();
+ setupDrawMesh(vertices, texCoords);
+
+ glDrawArrays(drawMode, 0, elementsCount);
+
+ finishDrawTexture();
+}
+
void OpenGLRenderer::chooseBlending(bool blend, SkXfermode::Mode mode,
ProgramDescription& description, bool swapSrcDst) {
blend = blend || mode != SkXfermode::kSrcOver_Mode;
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index c5e4c8e..5520edb 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -201,6 +201,7 @@
const float* positions, SkPaint* paint);
virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
const float* positions, SkPaint* paint, float length = -1.0f);
+ virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
virtual void resetShader();
virtual void setupShader(SkiaShader* shader);
@@ -216,6 +217,10 @@
SkPaint* filterPaint(SkPaint* paint);
+ ANDROID_API bool isCurrentTransformSimple() {
+ return mSnapshot->transform->isSimple();
+ }
+
/**
* Sets the alpha on the current snapshot. This alpha value will be modulated
* with other alpha values when drawing primitives.
@@ -366,6 +371,13 @@
private:
/**
+ * Discards the content of the framebuffer if supported by the driver.
+ * This method should be called at the beginning of a frame to optimize
+ * rendering on some tiler architectures.
+ */
+ void discardFramebuffer(float left, float top, float right, float bottom);
+
+ /**
* Ensures the state of the renderer is the same as the state of
* the GL context.
*/
@@ -589,6 +601,11 @@
bool swapSrcDst = false, bool ignoreTransform = false, GLuint vbo = 0,
bool ignoreScale = false, bool dirty = true);
+ void drawAlpha8TextureMesh(float left, float top, float right, float bottom,
+ GLuint texture, bool hasColor, int color, int alpha, SkXfermode::Mode mode,
+ GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
+ bool ignoreTransform, bool dirty = true);
+
/**
* Draws text underline and strike-through if needed.
*
@@ -693,7 +710,6 @@
void setupDrawAA();
void setupDrawVertexShape();
void setupDrawPoint(float pointSize);
- void setupDrawColor(int color);
void setupDrawColor(int color, int alpha);
void setupDrawColor(float r, float g, float b, float a);
void setupDrawAlpha8Color(int color, int alpha);
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 902c82f..e490151 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -37,7 +37,7 @@
// 2 triangles per patch, 3 vertices per triangle
uint32_t maxVertices = ((xCount + 1) * (yCount + 1) - emptyQuads) * 2 * 3;
mVertices = new TextureVertex[maxVertices];
- mUploaded = false;
+ mAllocatedVerticesCount = 0;
verticesCount = 0;
hasEmptyQuads = emptyQuads > 0;
@@ -68,38 +68,37 @@
memcpy(mYDivs, yDivs, mYCount * sizeof(int32_t));
}
-void Patch::copy(const int32_t* yDivs) {
- memcpy(mYDivs, yDivs, mYCount * sizeof(int32_t));
-}
-
void Patch::updateColorKey(const uint32_t colorKey) {
mColorKey = colorKey;
}
-bool Patch::matches(const int32_t* xDivs, const int32_t* yDivs, const uint32_t colorKey) {
+bool Patch::matches(const int32_t* xDivs, const int32_t* yDivs,
+ const uint32_t colorKey, const int8_t emptyQuads) {
+
+ bool matches = true;
+
+ if (mEmptyQuads != emptyQuads) {
+ mEmptyQuads = emptyQuads;
+ hasEmptyQuads = emptyQuads > 0;
+ matches = false;
+ }
+
if (mColorKey != colorKey) {
updateColorKey(colorKey);
- copy(xDivs, yDivs);
- return false;
+ matches = false;
}
- for (uint32_t i = 0; i < mXCount; i++) {
- if (mXDivs[i] != xDivs[i]) {
- // The Y divs may or may not match, copy everything
- copy(xDivs, yDivs);
- return false;
- }
+ if (memcmp(mXDivs, xDivs, mXCount * sizeof(int32_t))) {
+ memcpy(mXDivs, xDivs, mXCount * sizeof(int32_t));
+ matches = false;
}
- for (uint32_t i = 0; i < mYCount; i++) {
- if (mYDivs[i] != yDivs[i]) {
- // We know all the X divs match, copy only Y divs
- copy(yDivs);
- return false;
- }
+ if (memcmp(mYDivs, yDivs, mYCount * sizeof(int32_t))) {
+ memcpy(mYDivs, yDivs, mYCount * sizeof(int32_t));
+ matches = false;
}
- return true;
+ return matches;
}
///////////////////////////////////////////////////////////////////////////////
@@ -203,10 +202,10 @@
if (verticesCount > 0) {
Caches& caches = Caches::getInstance();
caches.bindMeshBuffer(meshBuffer);
- if (!mUploaded) {
+ if (mAllocatedVerticesCount < verticesCount) {
glBufferData(GL_ARRAY_BUFFER, sizeof(TextureVertex) * verticesCount,
mVertices, GL_DYNAMIC_DRAW);
- mUploaded = true;
+ mAllocatedVerticesCount = verticesCount;
} else {
glBufferSubData(GL_ARRAY_BUFFER, 0,
sizeof(TextureVertex) * verticesCount, mVertices);
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 0518d91..cab0e54 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -45,7 +45,7 @@
* indices to render the vertices.
*/
struct Patch {
- Patch(const uint32_t xCount, const uint32_t yCount, const int8_t emptyQuads = 0);
+ Patch(const uint32_t xCount, const uint32_t yCount, const int8_t emptyQuads);
~Patch();
void updateVertices(const float bitmapWidth, const float bitmapHeight,
@@ -53,7 +53,8 @@
void updateColorKey(const uint32_t colorKey);
void copy(const int32_t* xDivs, const int32_t* yDivs);
- bool matches(const int32_t* xDivs, const int32_t* yDivs, const uint32_t colorKey);
+ bool matches(const int32_t* xDivs, const int32_t* yDivs,
+ const uint32_t colorKey, const int8_t emptyQuads);
GLuint meshBuffer;
uint32_t verticesCount;
@@ -62,7 +63,7 @@
private:
TextureVertex* mVertices;
- bool mUploaded;
+ uint32_t mAllocatedVerticesCount;
int32_t* mXDivs;
int32_t* mYDivs;
@@ -72,8 +73,6 @@
uint32_t mYCount;
int8_t mEmptyQuads;
- void copy(const int32_t* yDivs);
-
void generateRow(TextureVertex*& vertex, float y1, float y2,
float v1, float v2, float stretchX, float rescaleX,
float width, float bitmapWidth, uint32_t& quadCount);
diff --git a/libs/hwui/PatchCache.cpp b/libs/hwui/PatchCache.cpp
index 9702c3d..8ee8f5c 100644
--- a/libs/hwui/PatchCache.cpp
+++ b/libs/hwui/PatchCache.cpp
@@ -97,7 +97,7 @@
}
mCache.add(description, mesh);
- } else if (!mesh->matches(xDivs, yDivs, colorKey)) {
+ } else if (!mesh->matches(xDivs, yDivs, colorKey, transparentQuads)) {
PATCH_LOGD("Patch mesh does not match, refreshing vertices");
mesh->updateVertices(bitmapWidth, bitmapHeight, 0.0f, 0.0f, pixelWidth, pixelHeight);
}
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index 03ddf59..4f682ed 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -93,9 +93,6 @@
PathCacheEntry entry(path, paint);
PathTexture* texture = mCache.get(entry);
- float left, top, offset;
- uint32_t width, height;
-
if (!texture) {
texture = addTexture(entry, path, paint);
} else if (path->getGenerationID() != texture->generation) {
diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h
index 2687592..bc12b0d 100644
--- a/libs/hwui/SkiaShader.h
+++ b/libs/hwui/SkiaShader.h
@@ -65,7 +65,7 @@
virtual void setupProgram(Program* program, const mat4& modelView, const Snapshot& snapshot,
GLuint* textureUnit);
- inline SkShader *getSkShader() {
+ inline SkShader* getSkShader() {
return mKey;
}
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp
index 7bfa63d..34afe97 100644
--- a/libs/hwui/font/Font.cpp
+++ b/libs/hwui/font/Font.cpp
@@ -18,6 +18,8 @@
#include <cutils/compiler.h>
+#include <utils/JenkinsHash.h>
+
#include <SkUtils.h>
#include "Debug.h"
@@ -33,14 +35,22 @@
// Font
///////////////////////////////////////////////////////////////////////////////
-Font::Font(FontRenderer* state, uint32_t fontId, float fontSize,
- int flags, uint32_t italicStyle, uint32_t scaleX,
- SkPaint::Style style, uint32_t strokeWidth) :
- mState(state), mFontId(fontId), mFontSize(fontSize),
- mFlags(flags), mItalicStyle(italicStyle), mScaleX(scaleX),
- mStyle(style), mStrokeWidth(mStrokeWidth) {
+Font::Font(FontRenderer* state, const Font::FontDescription& desc) :
+ mState(state), mDescription(desc) {
}
+Font::FontDescription::FontDescription(const SkPaint* paint, const mat4& matrix) {
+ mFontId = SkTypeface::UniqueID(paint->getTypeface());
+ mFontSize = paint->getTextSize();
+ mFlags = 0;
+ if (paint->isFakeBoldText()) {
+ mFlags |= Font::kFakeBold;
+ }
+ mItalicStyle = paint->getTextSkewX();
+ mScaleX = paint->getTextScaleX();
+ mStyle = paint->getStyle();
+ mStrokeWidth = paint->getStrokeWidth();
+}
Font::~Font() {
mState->removeFont(this);
@@ -50,6 +60,43 @@
}
}
+hash_t Font::FontDescription::hash() const {
+ uint32_t hash = JenkinsHashMix(0, mFontId);
+ hash = JenkinsHashMix(hash, android::hash_type(mFontSize));
+ hash = JenkinsHashMix(hash, android::hash_type(mFlags));
+ hash = JenkinsHashMix(hash, android::hash_type(mItalicStyle));
+ hash = JenkinsHashMix(hash, android::hash_type(mScaleX));
+ hash = JenkinsHashMix(hash, android::hash_type(mStyle));
+ hash = JenkinsHashMix(hash, android::hash_type(mStrokeWidth));
+ return JenkinsHashWhiten(hash);
+}
+
+int Font::FontDescription::compare(const Font::FontDescription& lhs,
+ const Font::FontDescription& rhs) {
+ int deltaInt = int(lhs.mFontId) - int(rhs.mFontId);
+ if (deltaInt != 0) return deltaInt;
+
+ if (lhs.mFontSize < rhs.mFontSize) return -1;
+ if (lhs.mFontSize > rhs.mFontSize) return +1;
+
+ if (lhs.mItalicStyle < rhs.mItalicStyle) return -1;
+ if (lhs.mItalicStyle > rhs.mItalicStyle) return +1;
+
+ deltaInt = int(lhs.mFlags) - int(rhs.mFlags);
+ if (deltaInt != 0) return deltaInt;
+
+ if (lhs.mScaleX < rhs.mScaleX) return -1;
+ if (lhs.mScaleX > rhs.mScaleX) return +1;
+
+ deltaInt = int(lhs.mStyle) - int(rhs.mStyle);
+ if (deltaInt != 0) return deltaInt;
+
+ if (lhs.mStrokeWidth < rhs.mStrokeWidth) return -1;
+ if (lhs.mStrokeWidth > rhs.mStrokeWidth) return +1;
+
+ return 0;
+}
+
void Font::invalidateTextureCache(CacheTexture* cacheTexture) {
for (uint32_t i = 0; i < mCachedGlyphs.size(); i++) {
CachedGlyphInfo* cachedGlyph = mCachedGlyphs.valueAt(i);
@@ -83,17 +130,17 @@
void Font::drawCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
uint8_t* bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* pos) {
- int nPenX = x + glyph->mBitmapLeft;
- int nPenY = y + glyph->mBitmapTop + glyph->mBitmapHeight;
+ float nPenX = x + glyph->mBitmapLeft;
+ float nPenY = y + (glyph->mBitmapTop + glyph->mBitmapHeight);
+
+ float width = (float) glyph->mBitmapWidth;
+ float height = (float) glyph->mBitmapHeight;
float u1 = glyph->mBitmapMinU;
float u2 = glyph->mBitmapMaxU;
float v1 = glyph->mBitmapMinV;
float v2 = glyph->mBitmapMaxV;
- int width = (int) glyph->mBitmapWidth;
- int height = (int) glyph->mBitmapHeight;
-
mState->appendMeshQuad(nPenX, nPenY, u1, v2,
nPenX + width, nPenY, u2, v2,
nPenX + width, nPenY - height, u2, v1,
@@ -136,7 +183,7 @@
vOffset += glyph->mBitmapTop + height;
SkPoint destination[4];
- measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent);
+ measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent);
// Move along the tangent and offset by the normal
destination[0].set(-tangent->fX * halfWidth - tangent->fY * vOffset,
@@ -176,24 +223,13 @@
// Is the glyph still in texture cache?
if (!cachedGlyph->mIsValid) {
- const SkGlyph& skiaGlyph = GET_METRICS(paint, textUnit);
+ const SkGlyph& skiaGlyph = GET_METRICS(paint, textUnit, NULL);
updateGlyphCache(paint, skiaGlyph, cachedGlyph, precaching);
}
return cachedGlyph;
}
-void Font::render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
- int numGlyphs, int x, int y, uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH) {
- if (bitmap != NULL && bitmapW > 0 && bitmapH > 0) {
- render(paint, text, start, len, numGlyphs, x, y, BITMAP, bitmap,
- bitmapW, bitmapH, NULL, NULL);
- } else {
- render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, NULL,
- 0, 0, NULL, NULL);
- }
-}
-
void Font::render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
int numGlyphs, int x, int y, const float* positions) {
render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, NULL,
@@ -298,71 +334,40 @@
text += start;
int glyphsCount = 0;
- if (CC_LIKELY(positions == NULL)) {
- SkFixed prevRsbDelta = 0;
+ const SkPaint::Align align = paint->getTextAlign();
- float penX = x + 0.5f;
- int penY = y;
+ while (glyphsCount < numGlyphs) {
+ glyph_t glyph = GET_GLYPH(text);
- while (glyphsCount < numGlyphs) {
- glyph_t glyph = GET_GLYPH(text);
-
- // Reached the end of the string
- if (IS_END_OF_STRING(glyph)) {
- break;
- }
-
- CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
- penX += SkFixedToFloat(AUTO_KERN(prevRsbDelta, cachedGlyph->mLsbDelta));
- prevRsbDelta = cachedGlyph->mRsbDelta;
-
- // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
- if (cachedGlyph->mIsValid) {
- (*this.*render)(cachedGlyph, (int) floorf(penX), penY,
- bitmap, bitmapW, bitmapH, bounds, positions);
- }
-
- penX += SkFixedToFloat(cachedGlyph->mAdvanceX);
-
- glyphsCount++;
+ // Reached the end of the string
+ if (IS_END_OF_STRING(glyph)) {
+ break;
}
- } else {
- const SkPaint::Align align = paint->getTextAlign();
- // This is for renderPosText()
- while (glyphsCount < numGlyphs) {
- glyph_t glyph = GET_GLYPH(text);
+ CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
- // Reached the end of the string
- if (IS_END_OF_STRING(glyph)) {
- break;
+ // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
+ if (cachedGlyph->mIsValid) {
+ int penX = x + positions[(glyphsCount << 1)];
+ int penY = y + positions[(glyphsCount << 1) + 1];
+
+ switch (align) {
+ case SkPaint::kRight_Align:
+ penX -= SkFixedToFloat(cachedGlyph->mAdvanceX);
+ penY -= SkFixedToFloat(cachedGlyph->mAdvanceY);
+ break;
+ case SkPaint::kCenter_Align:
+ penX -= SkFixedToFloat(cachedGlyph->mAdvanceX >> 1);
+ penY -= SkFixedToFloat(cachedGlyph->mAdvanceY >> 1);
+ default:
+ break;
}
- CachedGlyphInfo* cachedGlyph = getCachedGlyph(paint, glyph);
-
- // If it's still not valid, we couldn't cache it, so we shouldn't draw garbage
- if (cachedGlyph->mIsValid) {
- int penX = x + positions[(glyphsCount << 1)];
- int penY = y + positions[(glyphsCount << 1) + 1];
-
- switch (align) {
- case SkPaint::kRight_Align:
- penX -= SkFixedToFloat(cachedGlyph->mAdvanceX);
- penY -= SkFixedToFloat(cachedGlyph->mAdvanceY);
- break;
- case SkPaint::kCenter_Align:
- penX -= SkFixedToFloat(cachedGlyph->mAdvanceX >> 1);
- penY -= SkFixedToFloat(cachedGlyph->mAdvanceY >> 1);
- default:
- break;
- }
-
- (*this.*render)(cachedGlyph, penX, penY,
- bitmap, bitmapW, bitmapH, bounds, positions);
- }
-
- glyphsCount++;
+ (*this.*render)(cachedGlyph, penX, penY,
+ bitmap, bitmapW, bitmapH, bounds, positions);
}
+
+ glyphsCount++;
}
}
@@ -379,7 +384,7 @@
uint32_t startY = 0;
// Get the bitmap for the glyph
- paint->findImage(skiaGlyph);
+ paint->findImage(skiaGlyph, NULL);
mState->cacheBitmap(skiaGlyph, glyph, &startX, &startY, precaching);
if (!glyph->mIsValid) {
@@ -409,7 +414,7 @@
CachedGlyphInfo* newGlyph = new CachedGlyphInfo();
mCachedGlyphs.add(glyph, newGlyph);
- const SkGlyph& skiaGlyph = GET_METRICS(paint, glyph);
+ const SkGlyph& skiaGlyph = GET_METRICS(paint, glyph, NULL);
newGlyph->mGlyphIndex = skiaGlyph.fID;
newGlyph->mIsValid = false;
@@ -418,24 +423,16 @@
return newGlyph;
}
-Font* Font::create(FontRenderer* state, uint32_t fontId, float fontSize,
- int flags, uint32_t italicStyle, uint32_t scaleX,
- SkPaint::Style style, uint32_t strokeWidth) {
- Vector<Font*> &activeFonts = state->mActiveFonts;
+Font* Font::create(FontRenderer* state, const SkPaint* paint, const mat4& matrix) {
+ FontDescription description(paint, matrix);
+ Font* font = state->mActiveFonts.get(description);
- for (uint32_t i = 0; i < activeFonts.size(); i++) {
- Font* font = activeFonts[i];
- if (font->mFontId == fontId && font->mFontSize == fontSize &&
- font->mFlags == flags && font->mItalicStyle == italicStyle &&
- font->mScaleX == scaleX && font->mStyle == style &&
- (style == SkPaint::kFill_Style || font->mStrokeWidth == strokeWidth)) {
- return font;
- }
+ if (font) {
+ return font;
}
- Font* newFont = new Font(state, fontId, fontSize, flags, italicStyle,
- scaleX, style, strokeWidth);
- activeFonts.push(newFont);
+ Font* newFont = new Font(state, description);
+ state->mActiveFonts.put(description, newFont);
return newFont;
}
diff --git a/libs/hwui/font/Font.h b/libs/hwui/font/Font.h
index 7cab31e..6ddf162 100644
--- a/libs/hwui/font/Font.h
+++ b/libs/hwui/font/Font.h
@@ -25,6 +25,7 @@
#include "CachedGlyphInfo.h"
#include "../Rect.h"
+#include "../Matrix.h"
namespace android {
namespace uirenderer {
@@ -45,31 +46,52 @@
kFakeBold = 1
};
+ struct FontDescription {
+ FontDescription(const SkPaint* paint, const mat4& matrix);
+
+ static int compare(const FontDescription& lhs, const FontDescription& rhs);
+
+ hash_t hash() const;
+
+ bool operator==(const FontDescription& other) const {
+ return compare(*this, other) == 0;
+ }
+
+ bool operator!=(const FontDescription& other) const {
+ return compare(*this, other) != 0;
+ }
+
+ SkFontID mFontId;
+ float mFontSize;
+ int mFlags;
+ float mItalicStyle;
+ float mScaleX;
+ uint8_t mStyle;
+ float mStrokeWidth;
+ };
+
~Font();
- /**
- * Renders the specified string of text.
- * If bitmap is specified, it will be used as the render target
- */
- void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
- int numGlyphs, int x, int y, uint8_t *bitmap = NULL,
- uint32_t bitmapW = 0, uint32_t bitmapH = 0);
-
- void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+ void render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, int x, int y, const float* positions);
- void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+ void render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, SkPath* path, float hOffset, float vOffset);
+ const Font::FontDescription& getDescription() const {
+ return mDescription;
+ }
+
/**
* Creates a new font associated with the specified font state.
*/
- static Font* create(FontRenderer* state, uint32_t fontId, float fontSize,
- int flags, uint32_t italicStyle, uint32_t scaleX, SkPaint::Style style,
- uint32_t strokeWidth);
+ static Font* create(FontRenderer* state, const SkPaint* paint, const mat4& matrix);
private:
friend class FontRenderer;
+
+ Font(FontRenderer* state, const Font::FontDescription& desc);
+
typedef void (Font::*RenderGlyph)(CachedGlyphInfo*, int, int, uint8_t*,
uint32_t, uint32_t, Rect*, const float*);
@@ -88,12 +110,6 @@
void measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
int numGlyphs, Rect *bounds, const float* positions);
- Font(FontRenderer* state, uint32_t fontId, float fontSize, int flags, uint32_t italicStyle,
- uint32_t scaleX, SkPaint::Style style, uint32_t strokeWidth);
-
- // Cache of glyphs
- DefaultKeyedVector<glyph_t, CachedGlyphInfo*> mCachedGlyphs;
-
void invalidateTextureCache(CacheTexture* cacheTexture = NULL);
CachedGlyphInfo* cacheGlyph(SkPaint* paint, glyph_t glyph, bool precaching);
@@ -115,15 +131,25 @@
CachedGlyphInfo* getCachedGlyph(SkPaint* paint, glyph_t textUnit, bool precaching = false);
FontRenderer* mState;
- uint32_t mFontId;
- float mFontSize;
- int mFlags;
- uint32_t mItalicStyle;
- uint32_t mScaleX;
- SkPaint::Style mStyle;
- uint32_t mStrokeWidth;
+ FontDescription mDescription;
+
+ // Cache of glyphs
+ DefaultKeyedVector<glyph_t, CachedGlyphInfo*> mCachedGlyphs;
};
+inline int strictly_order_type(const Font::FontDescription& lhs,
+ const Font::FontDescription& rhs) {
+ return Font::FontDescription::compare(lhs, rhs) < 0;
+}
+
+inline int compare_type(const Font::FontDescription& lhs, const Font::FontDescription& rhs) {
+ return Font::FontDescription::compare(lhs, rhs);
+}
+
+inline hash_t hash_type(const Font::FontDescription& entry) {
+ return entry.hash();
+}
+
}; // namespace uirenderer
}; // namespace android
diff --git a/libs/hwui/font/FontUtil.h b/libs/hwui/font/FontUtil.h
index 12247ba..4f9c46b 100644
--- a/libs/hwui/font/FontUtil.h
+++ b/libs/hwui/font/FontUtil.h
@@ -37,7 +37,7 @@
#if RENDER_TEXT_AS_GLYPHS
typedef uint16_t glyph_t;
#define TO_GLYPH(g) g
- #define GET_METRICS(paint, glyph) paint->getGlyphMetrics(glyph)
+ #define GET_METRICS(paint, glyph, matrix) paint->getGlyphMetrics(glyph, matrix)
#define GET_GLYPH(text) nextGlyph((const uint16_t**) &text)
#define IS_END_OF_STRING(glyph) false
@@ -50,7 +50,7 @@
#else
typedef SkUnichar glyph_t;
#define TO_GLYPH(g) ((SkUnichar) g)
- #define GET_METRICS(paint, glyph) paint->getUnicharMetrics(glyph)
+ #define GET_METRICS(paint, glyph, matrix) paint->getUnicharMetrics(glyph, matrix)
#define GET_GLYPH(text) SkUTF16_NextUnichar((const uint16_t**) &text)
#define IS_END_OF_STRING(glyph) glyph < 0
#endif
diff --git a/location/java/android/location/ILocationManager.aidl b/location/java/android/location/ILocationManager.aidl
index f663e0a..c353ec6 100644
--- a/location/java/android/location/ILocationManager.aidl
+++ b/location/java/android/location/ILocationManager.aidl
@@ -47,7 +47,7 @@
Location getLastLocation(in LocationRequest request, String packageName);
- boolean addGpsStatusListener(IGpsStatusListener listener);
+ boolean addGpsStatusListener(IGpsStatusListener listener, String packageName);
void removeGpsStatusListener(IGpsStatusListener listener);
boolean geocoderIsPresent();
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 5a2f71b..0b9286e 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -1461,7 +1461,7 @@
}
try {
GpsStatusListenerTransport transport = new GpsStatusListenerTransport(listener);
- result = mService.addGpsStatusListener(transport);
+ result = mService.addGpsStatusListener(transport, mContext.getPackageName());
if (result) {
mGpsStatusListeners.put(listener, transport);
}
@@ -1507,7 +1507,7 @@
}
try {
GpsStatusListenerTransport transport = new GpsStatusListenerTransport(listener);
- result = mService.addGpsStatusListener(transport);
+ result = mService.addGpsStatusListener(transport, mContext.getPackageName());
if (result) {
mNmeaListeners.put(listener, transport);
}
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index addb4cb..9aac0e6 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -157,6 +157,7 @@
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME = 26;
private static final int MSG_CONFIGURE_SAFE_MEDIA_VOLUME_FORCED = 27;
private static final int MSG_PERSIST_SAFE_VOLUME_STATE = 28;
+ private static final int MSG_PROMOTE_RCC = 29;
// flags for MSG_PERSIST_VOLUME indicating if current and/or last audible volume should be
// persisted
@@ -3527,6 +3528,10 @@
case MSG_PERSIST_SAFE_VOLUME_STATE:
onPersistSafeVolumeState(msg.arg1);
break;
+
+ case MSG_PROMOTE_RCC:
+ onPromoteRcc(msg.arg1);
+ break;
}
}
}
@@ -4963,28 +4968,34 @@
/**
* Helper function:
* Set the new remote control receiver at the top of the RC focus stack.
+ * Called synchronized on mAudioFocusLock, then mRCStack
* precondition: mediaIntent != null, target != null
*/
- private void pushMediaButtonReceiver(PendingIntent mediaIntent, ComponentName target) {
+ private void pushMediaButtonReceiver_syncAfRcs(PendingIntent mediaIntent, ComponentName target) {
// already at top of stack?
if (!mRCStack.empty() && mRCStack.peek().mMediaIntent.equals(mediaIntent)) {
return;
}
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
RemoteControlStackEntry rcse = null;
boolean wasInsideStack = false;
- while(stackIterator.hasNext()) {
- rcse = (RemoteControlStackEntry)stackIterator.next();
- if(rcse.mMediaIntent.equals(mediaIntent)) {
- wasInsideStack = true;
- stackIterator.remove();
- break;
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ rcse = mRCStack.elementAt(index);
+ if(rcse.mMediaIntent.equals(mediaIntent)) {
+ // ok to remove element while traversing the stack since we're leaving the loop
+ mRCStack.removeElementAt(index);
+ wasInsideStack = true;
+ break;
+ }
}
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing media button stack, lock error? ", e);
}
if (!wasInsideStack) {
rcse = new RemoteControlStackEntry(mediaIntent, target);
}
- mRCStack.push(rcse);
+ mRCStack.push(rcse); // rcse is never null
// post message to persist the default media button receiver
mAudioHandler.sendMessage( mAudioHandler.obtainMessage(
@@ -4994,17 +5005,23 @@
/**
* Helper function:
* Remove the remote control receiver from the RC focus stack.
+ * Called synchronized on mAudioFocusLock, then mRCStack
* precondition: pi != null
*/
- private void removeMediaButtonReceiver(PendingIntent pi) {
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
- while(stackIterator.hasNext()) {
- RemoteControlStackEntry rcse = (RemoteControlStackEntry)stackIterator.next();
- if(rcse.mMediaIntent.equals(pi)) {
- stackIterator.remove();
- rcse.unlinkToRcClientDeath();
- break;
+ private void removeMediaButtonReceiver_syncAfRcs(PendingIntent pi) {
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if (rcse.mMediaIntent.equals(pi)) {
+ rcse.unlinkToRcClientDeath();
+ // ok to remove element while traversing the stack since we're leaving the loop
+ mRCStack.removeElementAt(index);
+ break;
+ }
}
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing media button stack, lock error? ", e);
}
}
@@ -5234,6 +5251,50 @@
}
/**
+ * Helper function:
+ * Post a message to asynchronously move the media button event receiver associated with the
+ * given remote control client ID to the top of the remote control stack
+ * @param rccId
+ */
+ private void postPromoteRcc(int rccId) {
+ sendMsg(mAudioHandler, MSG_PROMOTE_RCC, SENDMSG_REPLACE,
+ rccId /*arg1*/, 0, null, 0/*delay*/);
+ }
+
+ private void onPromoteRcc(int rccId) {
+ if (DEBUG_RC) { Log.d(TAG, "Promoting RCC " + rccId); }
+ synchronized(mAudioFocusLock) {
+ synchronized(mRCStack) {
+ // ignore if given RCC ID is already at top of remote control stack
+ if (!mRCStack.isEmpty() && (mRCStack.peek().mRccId == rccId)) {
+ return;
+ }
+ int indexToPromote = -1;
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if (rcse.mRccId == rccId) {
+ indexToPromote = index;
+ break;
+ }
+ }
+ if (indexToPromote >= 0) {
+ if (DEBUG_RC) { Log.d(TAG, " moving RCC from index " + indexToPromote
+ + " to " + (mRCStack.size()-1)); }
+ final RemoteControlStackEntry rcse = mRCStack.remove(indexToPromote);
+ mRCStack.push(rcse);
+ // the RC stack changed, reevaluate the display
+ checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
+ }
+ }//synchronized(mRCStack)
+ }//synchronized(mAudioFocusLock)
+ }
+
+ /**
* see AudioManager.registerMediaButtonIntent(PendingIntent pi, ComponentName c)
* precondition: mediaIntent != null, target != null
*/
@@ -5242,7 +5303,7 @@
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
- pushMediaButtonReceiver(mediaIntent, eventReceiver);
+ pushMediaButtonReceiver_syncAfRcs(mediaIntent, eventReceiver);
// new RC client, assume every type of information shall be queried
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
}
@@ -5260,7 +5321,7 @@
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
boolean topOfStackWillChange = isCurrentRcController(mediaIntent);
- removeMediaButtonReceiver(mediaIntent);
+ removeMediaButtonReceiver_syncAfRcs(mediaIntent);
if (topOfStackWillChange) {
// current RC client will change, assume every type of info needs to be queried
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
@@ -5312,58 +5373,62 @@
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
// store the new display information
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
- while(stackIterator.hasNext()) {
- RemoteControlStackEntry rcse = stackIterator.next();
- if(rcse.mMediaIntent.equals(mediaIntent)) {
- // already had a remote control client?
- if (rcse.mRcClientDeathHandler != null) {
- // stop monitoring the old client's death
- rcse.unlinkToRcClientDeath();
- }
- // save the new remote control client
- rcse.mRcClient = rcClient;
- rcse.mCallingPackageName = callingPackageName;
- rcse.mCallingUid = Binder.getCallingUid();
- if (rcClient == null) {
- // here rcse.mRcClientDeathHandler is null;
- rcse.resetPlaybackInfo();
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if(rcse.mMediaIntent.equals(mediaIntent)) {
+ // already had a remote control client?
+ if (rcse.mRcClientDeathHandler != null) {
+ // stop monitoring the old client's death
+ rcse.unlinkToRcClientDeath();
+ }
+ // save the new remote control client
+ rcse.mRcClient = rcClient;
+ rcse.mCallingPackageName = callingPackageName;
+ rcse.mCallingUid = Binder.getCallingUid();
+ if (rcClient == null) {
+ // here rcse.mRcClientDeathHandler is null;
+ rcse.resetPlaybackInfo();
+ break;
+ }
+ rccId = rcse.mRccId;
+
+ // there is a new (non-null) client:
+ // 1/ give the new client the current display (if any)
+ if (mRcDisplay != null) {
+ try {
+ rcse.mRcClient.plugRemoteControlDisplay(mRcDisplay);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error connecting RCD to RCC in RCC registration",e);
+ }
+ }
+ // 2/ monitor the new client's death
+ IBinder b = rcse.mRcClient.asBinder();
+ RcClientDeathHandler rcdh =
+ new RcClientDeathHandler(b, rcse.mMediaIntent);
+ try {
+ b.linkToDeath(rcdh, 0);
+ } catch (RemoteException e) {
+ // remote control client is DOA, disqualify it
+ Log.w(TAG, "registerRemoteControlClient() has a dead client " + b);
+ rcse.mRcClient = null;
+ }
+ rcse.mRcClientDeathHandler = rcdh;
break;
}
- rccId = rcse.mRccId;
-
- // there is a new (non-null) client:
- // 1/ give the new client the current display (if any)
- if (mRcDisplay != null) {
- try {
- rcse.mRcClient.plugRemoteControlDisplay(mRcDisplay);
- } catch (RemoteException e) {
- Log.e(TAG, "Error connecting remote control display to client: "+e);
- e.printStackTrace();
- }
- }
- // 2/ monitor the new client's death
- IBinder b = rcse.mRcClient.asBinder();
- RcClientDeathHandler rcdh =
- new RcClientDeathHandler(b, rcse.mMediaIntent);
- try {
- b.linkToDeath(rcdh, 0);
- } catch (RemoteException e) {
- // remote control client is DOA, disqualify it
- Log.w(TAG, "registerRemoteControlClient() has a dead client " + b);
- rcse.mRcClient = null;
- }
- rcse.mRcClientDeathHandler = rcdh;
- break;
- }
+ }//for
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
}
+
// if the eventReceiver is at the top of the stack
// then check for potential refresh of the remote controls
if (isCurrentRcController(mediaIntent)) {
checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
}
- }
- }
+ }//synchronized(mRCStack)
+ }//synchronized(mAudioFocusLock)
return rccId;
}
@@ -5373,20 +5438,33 @@
*/
public void unregisterRemoteControlClient(PendingIntent mediaIntent,
IRemoteControlClient rcClient) {
+ if (DEBUG_RC) Log.i(TAG, "Unregister remote control client rcClient="+rcClient);
synchronized(mAudioFocusLock) {
synchronized(mRCStack) {
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
- while(stackIterator.hasNext()) {
- RemoteControlStackEntry rcse = stackIterator.next();
- if ((rcse.mMediaIntent.equals(mediaIntent))
- && rcClient.equals(rcse.mRcClient)) {
- // we found the IRemoteControlClient to unregister
- // stop monitoring its death
- rcse.unlinkToRcClientDeath();
- // reset the client-related fields
- rcse.mRcClient = null;
- rcse.mCallingPackageName = null;
+ boolean topRccChange = false;
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if ((rcse.mMediaIntent.equals(mediaIntent))
+ && rcClient.equals(rcse.mRcClient)) {
+ // we found the IRemoteControlClient to unregister
+ // stop monitoring its death
+ rcse.unlinkToRcClientDeath();
+ // reset the client-related fields
+ rcse.mRcClient = null;
+ rcse.mCallingPackageName = null;
+ topRccChange = (index == mRCStack.size()-1);
+ // there can only be one matching RCC in the RC stack, we're done
+ break;
+ }
}
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
+ }
+ if (topRccChange) {
+ // no more RCC for the RCD, check for potential refresh of the remote controls
+ checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
}
}
}
@@ -5475,8 +5553,9 @@
// new display, start monitoring its death
rcDisplay_startDeathMonitor_syncRcStack();
- // let all the remote control clients there is a new display
- // no need to unplug the previous because we only support one display
+ // let all the remote control clients know there is a new display, so the remote
+ // control stack traversal order doesn't matter.
+ // No need to unplug the previous because we only support one display
// and the clients don't track the death of the display
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
@@ -5515,7 +5594,8 @@
rcDisplay_stopDeathMonitor_syncRcStack();
mRcDisplay = null;
- // disconnect this remote control display from all the clients
+ // disconnect this remote control display from all the clients, so the remote
+ // control stack traversal order doesn't matter
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
@@ -5549,60 +5629,72 @@
if(DEBUG_RC) Log.d(TAG, "onNewPlaybackInfoForRcc(id=" + rccId +
", what=" + key + ",val=" + value + ")");
synchronized(mRCStack) {
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
- while(stackIterator.hasNext()) {
- RemoteControlStackEntry rcse = stackIterator.next();
- if (rcse.mRccId == rccId) {
- switch (key) {
- case RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE:
- rcse.mPlaybackType = value;
- postReevaluateRemote();
- break;
- case RemoteControlClient.PLAYBACKINFO_VOLUME:
- rcse.mPlaybackVolume = value;
- synchronized (mMainRemote) {
- if (rccId == mMainRemote.mRccId) {
- mMainRemote.mVolume = value;
- mVolumePanel.postHasNewRemotePlaybackInfo();
+ // iterating from top of stack as playback information changes are more likely
+ // on entries at the top of the remote control stack
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if (rcse.mRccId == rccId) {
+ switch (key) {
+ case RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE:
+ rcse.mPlaybackType = value;
+ postReevaluateRemote();
+ break;
+ case RemoteControlClient.PLAYBACKINFO_VOLUME:
+ rcse.mPlaybackVolume = value;
+ synchronized (mMainRemote) {
+ if (rccId == mMainRemote.mRccId) {
+ mMainRemote.mVolume = value;
+ mVolumePanel.postHasNewRemotePlaybackInfo();
+ }
}
- }
- break;
- case RemoteControlClient.PLAYBACKINFO_VOLUME_MAX:
- rcse.mPlaybackVolumeMax = value;
- synchronized (mMainRemote) {
- if (rccId == mMainRemote.mRccId) {
- mMainRemote.mVolumeMax = value;
- mVolumePanel.postHasNewRemotePlaybackInfo();
+ break;
+ case RemoteControlClient.PLAYBACKINFO_VOLUME_MAX:
+ rcse.mPlaybackVolumeMax = value;
+ synchronized (mMainRemote) {
+ if (rccId == mMainRemote.mRccId) {
+ mMainRemote.mVolumeMax = value;
+ mVolumePanel.postHasNewRemotePlaybackInfo();
+ }
}
- }
- break;
- case RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING:
- rcse.mPlaybackVolumeHandling = value;
- synchronized (mMainRemote) {
- if (rccId == mMainRemote.mRccId) {
- mMainRemote.mVolumeHandling = value;
- mVolumePanel.postHasNewRemotePlaybackInfo();
+ break;
+ case RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING:
+ rcse.mPlaybackVolumeHandling = value;
+ synchronized (mMainRemote) {
+ if (rccId == mMainRemote.mRccId) {
+ mMainRemote.mVolumeHandling = value;
+ mVolumePanel.postHasNewRemotePlaybackInfo();
+ }
}
- }
- break;
- case RemoteControlClient.PLAYBACKINFO_USES_STREAM:
- rcse.mPlaybackStream = value;
- break;
- case RemoteControlClient.PLAYBACKINFO_PLAYSTATE:
- rcse.mPlaybackState = value;
- synchronized (mMainRemote) {
- if (rccId == mMainRemote.mRccId) {
- mMainRemoteIsActive = isPlaystateActive(value);
- postReevaluateRemote();
+ break;
+ case RemoteControlClient.PLAYBACKINFO_USES_STREAM:
+ rcse.mPlaybackStream = value;
+ break;
+ case RemoteControlClient.PLAYBACKINFO_PLAYSTATE:
+ rcse.mPlaybackState = value;
+ synchronized (mMainRemote) {
+ if (rccId == mMainRemote.mRccId) {
+ mMainRemoteIsActive = isPlaystateActive(value);
+ postReevaluateRemote();
+ }
}
- }
- break;
- default:
- Log.e(TAG, "unhandled key " + key + " for RCC " + rccId);
- break;
+ // an RCC moving to a "playing" state should become the media button
+ // event receiver so it can be controlled, without requiring the
+ // app to re-register its receiver
+ if (isPlaystateActive(value)) {
+ postPromoteRcc(rccId);
+ }
+ break;
+ default:
+ Log.e(TAG, "unhandled key " + key + " for RCC " + rccId);
+ break;
+ }
+ return;
}
- return;
- }
+ }//for
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
}
}
}
@@ -5615,6 +5707,11 @@
// handler for MSG_RCC_NEW_VOLUME_OBS
private void onRegisterVolumeObserverForRcc(int rccId, IRemoteVolumeObserver rvo) {
synchronized(mRCStack) {
+ // The stack traversal order doesn't matter because there is only one stack entry
+ // with this RCC ID, and we can stop iterating over the stack entries once the matching
+ // ID has been found.
+ // FIXME optimize by traversing stack from top to bottom, the matching ID is more likely
+ // at the top of the stack
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
@@ -5634,23 +5731,28 @@
*/
private boolean checkUpdateRemoteStateIfActive(int streamType) {
synchronized(mRCStack) {
- Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
- while(stackIterator.hasNext()) {
- RemoteControlStackEntry rcse = stackIterator.next();
- if ((rcse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE)
- && isPlaystateActive(rcse.mPlaybackState)
- && (rcse.mPlaybackStream == streamType)) {
- if (DEBUG_RC) Log.d(TAG, "remote playback active on stream " + streamType
- + ", vol =" + rcse.mPlaybackVolume);
- synchronized (mMainRemote) {
- mMainRemote.mRccId = rcse.mRccId;
- mMainRemote.mVolume = rcse.mPlaybackVolume;
- mMainRemote.mVolumeMax = rcse.mPlaybackVolumeMax;
- mMainRemote.mVolumeHandling = rcse.mPlaybackVolumeHandling;
- mMainRemoteIsActive = true;
+ // iterating from top of stack as active playback is more likely on entries at the top
+ try {
+ for (int index = mRCStack.size()-1; index >= 0; index--) {
+ final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+ if ((rcse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE)
+ && isPlaystateActive(rcse.mPlaybackState)
+ && (rcse.mPlaybackStream == streamType)) {
+ if (DEBUG_RC) Log.d(TAG, "remote playback active on stream " + streamType
+ + ", vol =" + rcse.mPlaybackVolume);
+ synchronized (mMainRemote) {
+ mMainRemote.mRccId = rcse.mRccId;
+ mMainRemote.mVolume = rcse.mPlaybackVolume;
+ mMainRemote.mVolumeMax = rcse.mPlaybackVolumeMax;
+ mMainRemote.mVolumeHandling = rcse.mPlaybackVolumeHandling;
+ mMainRemoteIsActive = true;
+ }
+ return true;
}
- return true;
}
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // not expected to happen, indicates improper concurrent modification
+ Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
}
}
synchronized (mMainRemote) {
@@ -5710,6 +5812,11 @@
}
IRemoteVolumeObserver rvo = null;
synchronized (mRCStack) {
+ // The stack traversal order doesn't matter because there is only one stack entry
+ // with this RCC ID, and we can stop iterating over the stack entries once the matching
+ // ID has been found.
+ // FIXME optimize by traversing stack from top to bottom, the matching ID is more likely
+ // at the top of the stack
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
@@ -5758,6 +5865,11 @@
}
IRemoteVolumeObserver rvo = null;
synchronized (mRCStack) {
+ // The stack traversal order doesn't matter because there is only one stack entry
+ // with this RCC ID, and we can stop iterating over the stack entries once the matching
+ // ID has been found.
+ // FIXME optimize by traversing stack from top to bottom, the matching ID is more likely
+ // at the top of the stack
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
@@ -5791,6 +5903,8 @@
// is there a registered RemoteControlClient that is handling remote playback
boolean hasRemotePlayback = false;
synchronized (mRCStack) {
+ // iteration stops when PLAYBACK_TYPE_REMOTE is found, so remote control stack
+ // traversal order doesn't matter
Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
while(stackIterator.hasNext()) {
RemoteControlStackEntry rcse = stackIterator.next();
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index fbbcb0a..7768a61 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -958,7 +958,9 @@
// If the rowId of the inserted file is needed, it gets inserted immediately,
// bypassing the bulk inserter.
if (inserter == null || needToSetSettings) {
- inserter.flushAll();
+ if (inserter != null) {
+ inserter.flushAll();
+ }
result = mMediaProvider.insert(tableUri, values);
} else if (entry.mFormat == MtpConstants.FORMAT_ASSOCIATION) {
inserter.insertwithPriority(tableUri, values);
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
index 95e7b5e..5c74552 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
@@ -33,18 +33,16 @@
// the test must be supported by the corresponding camera.
public static int mCameraId = 0;
public static int mProfileQuality = CamcorderProfile.QUALITY_HIGH;
- public static CamcorderProfile profile =
- CamcorderProfile.get(mCameraId, mProfileQuality);
-
- public static int mIterations = 100;
+ public static CamcorderProfile profile = CamcorderProfile.get(mCameraId, mProfileQuality);
+ public static int mIterations = 15;
public static int mVideoEncoder = profile.videoCodec;
- public static int mAudioEncdoer = profile.audioCodec;
+ public static int mAudioEncoder = profile.audioCodec;
public static int mFrameRate = profile.videoFrameRate;
public static int mVideoWidth = profile.videoFrameWidth;
public static int mVideoHeight = profile.videoFrameHeight;
public static int mBitRate = profile.videoBitRate;
public static boolean mRemoveVideo = true;
- public static int mDuration = 10 * 1000; // 10 seconds
+ public static int mDuration = 60 * 1000; // 60 seconds
public static int mTimeLapseDuration = 180 * 1000; // 3 minutes
public static double mCaptureRate = 0.5; // 2 sec timelapse interval
@@ -64,41 +62,41 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
String iterations = (String) icicle.get("iterations");
- String video_encoder = (String) icicle.get("video_encoder");
- String audio_encoder = (String) icicle.get("audio_encoder");
- String frame_rate = (String) icicle.get("frame_rate");
- String video_width = (String) icicle.get("video_width");
- String video_height = (String) icicle.get("video_height");
- String bit_rate = (String) icicle.get("bit_rate");
- String record_duration = (String) icicle.get("record_duration");
- String remove_videos = (String) icicle.get("remove_videos");
+ String videoEncoder = (String) icicle.get("video_encoder");
+ String audioEncoder = (String) icicle.get("audio_encoder");
+ String frameRate = (String) icicle.get("frame_rate");
+ String videoWidth = (String) icicle.get("video_width");
+ String videoHeight = (String) icicle.get("video_height");
+ String bitRate = (String) icicle.get("bit_rate");
+ String recordDuration = (String) icicle.get("record_duration");
+ String removeVideos = (String) icicle.get("remove_videos");
if (iterations != null ) {
mIterations = Integer.parseInt(iterations);
}
- if ( video_encoder != null) {
- mVideoEncoder = Integer.parseInt(video_encoder);
+ if (videoEncoder != null) {
+ mVideoEncoder = Integer.parseInt(videoEncoder);
}
- if ( audio_encoder != null) {
- mAudioEncdoer = Integer.parseInt(audio_encoder);
+ if (audioEncoder != null) {
+ mAudioEncoder = Integer.parseInt(audioEncoder);
}
- if (frame_rate != null) {
- mFrameRate = Integer.parseInt(frame_rate);
+ if (frameRate != null) {
+ mFrameRate = Integer.parseInt(frameRate);
}
- if (video_width != null) {
- mVideoWidth = Integer.parseInt(video_width);
+ if (videoWidth != null) {
+ mVideoWidth = Integer.parseInt(videoWidth);
}
- if (video_height != null) {
- mVideoHeight = Integer.parseInt(video_height);
+ if (videoHeight != null) {
+ mVideoHeight = Integer.parseInt(videoHeight);
}
- if (bit_rate != null) {
- mBitRate = Integer.parseInt(bit_rate);
+ if (bitRate != null) {
+ mBitRate = Integer.parseInt(bitRate);
}
- if (record_duration != null) {
- mDuration = Integer.parseInt(record_duration);
+ if (recordDuration != null) {
+ mDuration = Integer.parseInt(recordDuration);
}
- if (remove_videos != null) {
- if (remove_videos.compareTo("true") == 0) {
+ if (removeVideos != null) {
+ if (removeVideos.compareTo("true") == 0) {
mRemoveVideo = true;
} else {
mRemoveVideo = false;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
index ab9e36c3..ed1d8fc 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
@@ -28,6 +28,7 @@
import java.io.Writer;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
+import java.util.List;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
@@ -44,7 +45,7 @@
import junit.framework.Assert;
/**
- * Junit / Instrumentation test case for the camera zoom api
+ * Junit / Instrumentation test case for the camera zoom and scene mode APIs
*
* adb shell am instrument
* -e class com.android.mediaframeworktest.stress.CameraStressTest
@@ -54,18 +55,22 @@
private String TAG = "CameraStressTest";
private Camera mCamera;
+ private static final int CAMERA_ID = 0;
private static final int NUMBER_OF_ZOOM_LOOPS = 100;
+ private static final int NUMBER_OF_SCENE_MODE_LOOPS = 10;
private static final long WAIT_GENERIC = 3 * 1000; // 3 seconds
private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
private static final long WAIT_ZOOM_ANIMATION = 5 * 1000; // 5 seconds
- private static final String CAMERA_STRESS_OUTPUT =
- "/sdcard/cameraStressOutput.txt";
- private static final int CAMERA_ID = 0;
+ private static final String CAMERA_STRESS_IMAGES_DIRECTORY = "cameraStressImages";
+ private static final String CAMERA_STRESS_IMAGES_PREFIX = "camera-stress-test";
+ private static final String CAMERA_STRESS_OUTPUT = "cameraStressOutput.txt";
private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback();
private Thread mLooperThread;
private Handler mHandler;
+ private Writer mOutput;
+
public CameraStressTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
}
@@ -89,6 +94,20 @@
}
getActivity();
super.setUp();
+
+ File sdcard = Environment.getExternalStorageDirectory();
+
+ // Create the test images directory if it doesn't exist
+ File stressImagesDirectory = new File(String.format("%s/%s", sdcard,
+ CAMERA_STRESS_IMAGES_DIRECTORY));
+ if (!stressImagesDirectory.exists()) {
+ stressImagesDirectory.mkdir();
+ }
+
+ // Start writing output file
+ File stressOutFile = new File(String.format("%s/%s",sdcard, CAMERA_STRESS_OUTPUT));
+ mOutput = new BufferedWriter(new FileWriter(stressOutFile, true));
+ mOutput.write(this.getName() + ":\n");
}
@Override
@@ -105,6 +124,9 @@
mLooperThread = null;
}
+ mOutput.write("\n\n");
+ mOutput.close();
+
super.tearDown();
}
@@ -127,9 +149,7 @@
private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback {
public void onError(int error, android.hardware.Camera camera) {
- if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
- assertTrue("Camera test mediaserver died", false);
- }
+ fail(String.format("Camera error, code: %d", error));
}
}
@@ -154,49 +174,76 @@
try {
Log.v(TAG, "JPEG picture taken");
- fos = new FileOutputStream(String.format("%s/zoom-test-%d.jpg",
- Environment.getExternalStorageDirectory(), System.currentTimeMillis()));
+ fos = new FileOutputStream(String.format("%s/%s/%s-%d.jpg",
+ Environment.getExternalStorageDirectory(), CAMERA_STRESS_IMAGES_DIRECTORY,
+ CAMERA_STRESS_IMAGES_PREFIX, System.currentTimeMillis()));
fos.write(data);
- }
- catch (FileNotFoundException e) {
- Log.v(TAG, "File not found: " + e.toString());
- }
- catch (IOException e) {
- Log.v(TAG, "Error accessing file: " + e.toString());
- }
- finally {
+ } catch (FileNotFoundException e) {
+ Log.e(TAG, "File not found: " + e.toString());
+ } catch (IOException e) {
+ Log.e(TAG, "Error accessing file: " + e.toString());
+ } finally {
try {
if (fos != null) {
fos.close();
}
- }
- catch (IOException e) {
- Log.v(TAG, "Error closing file: " + e.toString());
+ } catch (IOException e) {
+ Log.e(TAG, "Error closing file: " + e.toString());
}
}
}
};
// Helper method for cleaning up pics taken during testStressCameraZoom
- private void cleanupZoomImages() {
+ private void cleanupStressTestImages() {
try {
- File sdcard = Environment.getExternalStorageDirectory();
+ File stressImagesDirectory = new File(String.format("%s/%s",
+ Environment.getExternalStorageDirectory(), CAMERA_STRESS_IMAGES_DIRECTORY));
File[] zoomImages = null;
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
- return name.startsWith("zoom-test-");
+ return name.startsWith(CAMERA_STRESS_IMAGES_PREFIX);
}
};
- zoomImages = sdcard.listFiles(filter);
+ zoomImages = stressImagesDirectory.listFiles(filter);
for (File f : zoomImages) {
f.delete();
}
+ } catch (SecurityException e) {
+ Log.e(TAG, "Security manager access violation: " + e.toString());
}
- catch (SecurityException e) {
- Log.v(TAG, "Security manager access violation: " + e.toString());
+ }
+
+ // Helper method for starting up the camera preview
+ private void startCameraPreview(SurfaceHolder surfaceHolder) {
+ try {
+ mCamera.setErrorCallback(mCameraErrorCallback);
+ mCamera.setPreviewDisplay(surfaceHolder);
+ mCamera.startPreview();
+ Thread.sleep(WAIT_GENERIC);
+ } catch (IOException e) {
+ Log.e(TAG, "Error setting preview display: " + e.toString());
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Error waiting for preview to come up: " + e.toString());
+ } catch (Exception e) {
+ Log.e(TAG, "Error starting up camera preview: " + e.toString());
+ }
+ }
+
+ // Helper method for taking a photo
+ private void capturePhoto() {
+ try {
+ mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
+ Thread.sleep(WAIT_GENERIC);
+ mCamera.stopPreview();
+ mCamera.release();
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Error waiting for photo to be taken: " + e.toString());
+ } catch (Exception e) {
+ Log.e(TAG, "Error capturing photo: " + e.toString());
}
}
@@ -205,14 +252,11 @@
public void testStressCameraZoom() throws Exception {
SurfaceHolder mSurfaceHolder;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- File stressOutFile = new File(CAMERA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
- output.write("Camera zoom stress:\n");
- output.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n");
+ mOutput.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n");
try {
Log.v(TAG, "Start preview");
- output.write("No of loop: ");
+ mOutput.write("No of loop: ");
mCamera = Camera.open(CAMERA_ID);
Camera.Parameters params = mCamera.getParameters();
@@ -220,9 +264,8 @@
if (!params.isSmoothZoomSupported() && !params.isZoomSupported()) {
Log.v(TAG, "Device camera does not support zoom");
- assertTrue("Camera zoom stress test", false);
- }
- else {
+ fail("Camera zoom stress test failed");
+ } else {
Log.v(TAG, "Device camera does support zoom");
int nextZoomLevel = 0;
@@ -235,11 +278,7 @@
}
});
- mCamera.setErrorCallback(mCameraErrorCallback);
- mCamera.setPreviewDisplay(mSurfaceHolder);
- mCamera.startPreview();
- Thread.sleep(WAIT_GENERIC);
-
+ startCameraPreview(mSurfaceHolder);
params = mCamera.getParameters();
int currentZoomLevel = params.getZoom();
@@ -250,8 +289,7 @@
if (params.isSmoothZoomSupported()) {
mCamera.startSmoothZoom(nextZoomLevel);
- }
- else {
+ } else {
params.setZoom(nextZoomLevel);
mCamera.setParameters(params);
}
@@ -259,23 +297,66 @@
// sleep allows for zoom animation to finish
Thread.sleep(WAIT_ZOOM_ANIMATION);
+ capturePhoto();
- // take picture
- mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
- Thread.sleep(WAIT_GENERIC);
- mCamera.stopPreview();
- mCamera.release();
- output.write(" ," + i);
+ if (i == 0) {
+ mOutput.write(Integer.toString(i));
+ } else {
+ mOutput.write(", " + i);
+ }
}
}
+ cleanupStressTestImages();
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ fail("Camera zoom stress test Exception");
+ }
+ }
- cleanupZoomImages();
+ // Test case for stressing the camera scene mode feature
+ @LargeTest
+ public void testStressCameraSceneModes() throws Exception {
+ SurfaceHolder mSurfaceHolder;
+ mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+
+ try {
+ mCamera = Camera.open(CAMERA_ID);
+ Camera.Parameters params = mCamera.getParameters();
+ mCamera.release();
+ List<String> supportedSceneModes = params.getSupportedSceneModes();
+ assertNotNull("No scene modes supported", supportedSceneModes);
+
+ mOutput.write("Total number of loops: " +
+ (NUMBER_OF_SCENE_MODE_LOOPS * supportedSceneModes.size()) + "\n");
+ Log.v(TAG, "Start preview");
+ mOutput.write("No of loop: ");
+
+ for (int i = 0; i < supportedSceneModes.size(); i++) {
+ for (int j = 0; j < NUMBER_OF_SCENE_MODE_LOOPS; j++) {
+ runOnLooper(new Runnable() {
+ @Override
+ public void run() {
+ mCamera = Camera.open(CAMERA_ID);
+ }
+ });
+
+ startCameraPreview(mSurfaceHolder);
+ Log.v(TAG, "Setting mode to " + supportedSceneModes.get(i));
+ params.setSceneMode(supportedSceneModes.get(i));
+ mCamera.setParameters(params);
+ capturePhoto();
+
+ if ((i == 0) && (j == 0)) {
+ mOutput.write(Integer.toString(j + i * NUMBER_OF_SCENE_MODE_LOOPS));
+ } else {
+ mOutput.write(", " + (j + i * NUMBER_OF_SCENE_MODE_LOOPS));
+ }
+ }
+ }
+ cleanupStressTestImages();
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ fail("Camera scene mode test Exception");
}
- catch (Exception e) {
- assertTrue("Camera zoom stress test Exception", false);
- Log.v(TAG, e.toString());
- }
- output.write("\n\n");
- output.close();
}
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
index 6995c60..6eb9891 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
@@ -31,6 +31,7 @@
import android.media.CamcorderProfile;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
+import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.test.ActivityInstrumentationTestCase2;
@@ -48,26 +49,26 @@
private MediaRecorder mRecorder;
private Camera mCamera;
+ private static final int CAMERA_ID = 0;
private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100;
private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100;
private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
private static final int NUMBER_OF_TIME_LAPSE_LOOPS = 25;
private static final int TIME_LAPSE_PLAYBACK_WAIT_TIME = 5* 1000; // 5 seconds
+ private static final int USE_TEST_RUNNER_PROFILE = -1;
+ private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
private static final long WAIT_TIME_CAMERA_TEST = 3 * 1000; // 3 seconds
private static final long WAIT_TIME_RECORDER_TEST = 6 * 1000; // 6 seconds
- private static final String OUTPUT_FILE = "/sdcard/temp";
private static final String OUTPUT_FILE_EXT = ".3gp";
- private static final String MEDIA_STRESS_OUTPUT =
- "/sdcard/mediaStressOutput.txt";
- private static final int CAMERA_ID = 0;
+ private static final String MEDIA_STRESS_OUTPUT = "mediaStressOutput.txt";
private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback();
private final RecorderErrorCallback mRecorderErrorCallback = new RecorderErrorCallback();
- private final static int WAIT_TIMEOUT = 10 * 1000; // 10 seconds
- private Thread mLooperThread;
private Handler mHandler;
+ private Thread mLooperThread;
+ private Writer mOutput;
public MediaRecorderStressTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
@@ -95,6 +96,11 @@
Thread.sleep(2000);
getActivity();
super.setUp();
+
+ File stressOutFile = new File(String.format("%s/%s",
+ Environment.getExternalStorageDirectory(), MEDIA_STRESS_OUTPUT));
+ mOutput = new BufferedWriter(new FileWriter(stressOutFile, true));
+ mOutput.write(this.getName() + "\n");
}
@Override
@@ -110,7 +116,8 @@
}
mLooperThread = null;
}
-
+ mOutput.write("\n\n");
+ mOutput.close();
super.tearDown();
}
@@ -133,16 +140,13 @@
private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback {
public void onError(int error, android.hardware.Camera camera) {
- if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
- assertTrue("Camera test mediaserver died", false);
- }
+ fail(String.format("Camera error, code: %d", error));
}
}
private final class RecorderErrorCallback implements MediaRecorder.OnErrorListener {
public void onError(MediaRecorder mr, int what, int extra) {
- // fail the test case no matter what error come up
- assertTrue("mediaRecorder error", false);
+ fail(String.format("Media recorder error, code: %d\textra: %d", what, extra));
}
}
@@ -151,14 +155,11 @@
public void testStressCamera() throws Exception {
SurfaceHolder mSurfaceHolder;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
- output.write("Camera start preview stress:\n");
- output.write("Total number of loops:" +
- NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
+ Log.v(TAG, "Camera start preview stress test");
+ mOutput.write("Total number of loops:" + NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
try {
Log.v(TAG, "Start preview");
- output.write("No of loop: ");
+ mOutput.write("No of loop: ");
for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++) {
runOnLooper(new Runnable() {
@@ -173,29 +174,27 @@
Thread.sleep(WAIT_TIME_CAMERA_TEST);
mCamera.stopPreview();
mCamera.release();
- output.write(" ," + i);
+ if (i == 0) {
+ mOutput.write(i + 1);
+ } else {
+ mOutput.write(String.format(", %d", (i + 1)));
+ }
}
} catch (Exception e) {
- assertTrue("CameraStressTest", false);
- Log.v(TAG, e.toString());
+ Log.e(TAG, e.toString());
+ fail("Camera startup preview stress test");
}
- output.write("\n\n");
- output.close();
}
//Test case for stressing the camera preview.
@LargeTest
public void testStressRecorder() throws Exception {
- String filename;
SurfaceHolder mSurfaceHolder;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
- output.write("H263 video record- reset after prepare Stress test\n");
- output.write("Total number of loops:" +
- NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
+ Log.v(TAG, "H263 video record: reset after prepare Stress test");
+ mOutput.write("Total number of loops:" + NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
try {
- output.write("No of loop: ");
+ mOutput.write("No of loop: ");
Log.v(TAG, "Start preview");
for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++) {
runOnLooper(new Runnable() {
@@ -205,12 +204,15 @@
}
});
Log.v(TAG, "counter = " + i);
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
+ String fileName = String.format("%s/temp%d%s",
+ Environment.getExternalStorageDirectory(),
+ i, OUTPUT_FILE_EXT);
+
+ Log.v(TAG, fileName);
mRecorder.setOnErrorListener(mRecorderErrorCallback);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
+ mRecorder.setOutputFile(fileName);
mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
mRecorder.setVideoSize(176,144);
Log.v(TAG, "setEncoder");
@@ -224,30 +226,29 @@
Thread.sleep(WAIT_TIME_RECORDER_TEST);
mRecorder.reset();
mRecorder.release();
- output.write(", " + i);
+ if (i == 0) {
+ mOutput.write(i + 1);
+ } else {
+ mOutput.write(String.format(", %d", (i + 1)));
+ }
}
} catch (Exception e) {
- assertTrue("Recorder Stress test", false);
- Log.v(TAG, e.toString());
+ Log.e(TAG, e.toString());
+ fail("H263 video recording stress test");
}
- output.write("\n\n");
- output.close();
}
//Stress test case for switching camera and video recorder preview.
@LargeTest
public void testStressCameraSwitchRecorder() throws Exception {
- String filename;
SurfaceHolder mSurfaceHolder;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
- output.write("Camera and video recorder preview switching\n");
- output.write("Total number of loops:"
- + NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
+ Log.v(TAG, "Camera and video recorder preview switching");
+ mOutput.write("Total number of loops: " +
+ NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
try {
Log.v(TAG, "Start preview");
- output.write("No of loop: ");
+ mOutput.write("No of loop: ");
for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++) {
runOnLooper(new Runnable() {
@Override
@@ -263,8 +264,10 @@
mCamera.release();
mCamera = null;
Log.v(TAG, "release camera");
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
+ String fileName = String.format("%s/temp%d%s",
+ Environment.getExternalStorageDirectory(),
+ i, OUTPUT_FILE_EXT);
+ Log.v(TAG, fileName);
runOnLooper(new Runnable() {
@Override
public void run() {
@@ -274,7 +277,7 @@
mRecorder.setOnErrorListener(mRecorderErrorCallback);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
+ mRecorder.setOutputFile(fileName);
mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
mRecorder.setVideoSize(176,144);
Log.v(TAG, "Media recorder setEncoder");
@@ -287,117 +290,167 @@
Thread.sleep(WAIT_TIME_CAMERA_TEST);
mRecorder.release();
Log.v(TAG, "release video recorder");
- output.write(", " + i);
+ if (i == 0) {
+ mOutput.write(i + 1);
+ } else {
+ mOutput.write(String.format(", %d", (i + 1)));
+ }
}
} catch (Exception e) {
- assertTrue("Camer and recorder switch mode", false);
- Log.v(TAG, e.toString());
+ Log.e(TAG, e.toString());
+ fail("Camera and recorder switch mode");
}
- output.write("\n\n");
- output.close();
}
- public void validateRecordedVideo(String recorded_file) {
+ public void validateRecordedVideo(String recordedFile) {
try {
MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(recorded_file);
+ mp.setDataSource(recordedFile);
mp.prepare();
int duration = mp.getDuration();
if (duration <= 0){
- assertTrue("stressRecordAndPlayback", false);
+ fail("stressRecordAndPlayback");
}
mp.release();
} catch (Exception e) {
- assertTrue("stressRecordAndPlayback", false);
+ fail("stressRecordAndPlayback");
}
}
- public void removeRecordedVideo(String filename){
- File video = new File(filename);
- Log.v(TAG, "remove recorded video " + filename);
+ public void removeRecordedVideo(String fileName){
+ File video = new File(fileName);
+ Log.v(TAG, "remove recorded video " + fileName);
video.delete();
}
- //Stress test case for record a video and play right away.
- @LargeTest
- public void testStressRecordVideoAndPlayback() throws Exception {
- int iterations = MediaRecorderStressTestRunner.mIterations;
- int video_encoder = MediaRecorderStressTestRunner.mVideoEncoder;
- int audio_encoder = MediaRecorderStressTestRunner.mAudioEncdoer;
- int frame_rate = MediaRecorderStressTestRunner.mFrameRate;
- int video_width = MediaRecorderStressTestRunner.mVideoWidth;
- int video_height = MediaRecorderStressTestRunner.mVideoHeight;
- int bit_rate = MediaRecorderStressTestRunner.mBitRate;
- boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo;
- int record_duration = MediaRecorderStressTestRunner.mDuration;
+ // Helper method for record & playback testing with different camcorder profiles
+ private void recordVideoAndPlayback(int profile) throws Exception {
+ int iterations;
+ int recordDuration;
+ boolean removeVideo;
- String filename;
- SurfaceHolder mSurfaceHolder;
- mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(
- new FileWriter(stressOutFile, true));
- output.write("Video record and play back stress test:\n");
- output.write("Total number of loops:"
- + NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS + "\n");
+ int videoEncoder;
+ int audioEncoder;
+ int frameRate;
+ int videoWidth;
+ int videoHeight;
+ int bitRate;
+
+ if (profile != USE_TEST_RUNNER_PROFILE) {
+ assertTrue(String.format("Camera doesn't support profile %d", profile),
+ CamcorderProfile.hasProfile(CAMERA_ID, profile));
+ CamcorderProfile camcorderProfile = CamcorderProfile.get(CAMERA_ID, profile);
+ videoEncoder = camcorderProfile.videoCodec;
+ audioEncoder = camcorderProfile.audioCodec;
+ frameRate = camcorderProfile.videoFrameRate;
+ videoWidth = camcorderProfile.videoFrameWidth;
+ videoHeight = camcorderProfile.videoFrameHeight;
+ bitRate = camcorderProfile.videoBitRate;
+ } else {
+ videoEncoder = MediaRecorderStressTestRunner.mVideoEncoder;
+ audioEncoder = MediaRecorderStressTestRunner.mAudioEncoder;
+ frameRate = MediaRecorderStressTestRunner.mFrameRate;
+ videoWidth = MediaRecorderStressTestRunner.mVideoWidth;
+ videoHeight = MediaRecorderStressTestRunner.mVideoHeight;
+ bitRate = MediaRecorderStressTestRunner.mBitRate;
+ }
+ iterations = MediaRecorderStressTestRunner.mIterations;
+ recordDuration = MediaRecorderStressTestRunner.mDuration;
+ removeVideo = MediaRecorderStressTestRunner.mRemoveVideo;
+
+ SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+ mOutput.write("Total number of loops: " + iterations + "\n");
+
try {
- output.write("No of loop: ");
- for (int i = 0; i < iterations; i++){
- filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
+ mOutput.write("No of loop: ");
+ for (int i = 0; i < iterations; i++) {
+ String fileName = String.format("%s/temp%d%s",
+ Environment.getExternalStorageDirectory(), i, OUTPUT_FILE_EXT);
+ Log.v(TAG, fileName);
+
runOnLooper(new Runnable() {
@Override
public void run() {
mRecorder = new MediaRecorder();
}
});
+
Log.v(TAG, "iterations : " + iterations);
- Log.v(TAG, "video_encoder : " + video_encoder);
- Log.v(TAG, "audio_encoder : " + audio_encoder);
- Log.v(TAG, "frame_rate : " + frame_rate);
- Log.v(TAG, "video_width : " + video_width);
- Log.v(TAG, "video_height : " + video_height);
- Log.v(TAG, "bit rate : " + bit_rate);
- Log.v(TAG, "record_duration : " + record_duration);
+ Log.v(TAG, "video encoder : " + videoEncoder);
+ Log.v(TAG, "audio encoder : " + audioEncoder);
+ Log.v(TAG, "frame rate : " + frameRate);
+ Log.v(TAG, "video width : " + videoWidth);
+ Log.v(TAG, "video height : " + videoHeight);
+ Log.v(TAG, "bit rate : " + bitRate);
+ Log.v(TAG, "record duration : " + recordDuration);
mRecorder.setOnErrorListener(mRecorderErrorCallback);
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setOutputFile(filename);
- mRecorder.setVideoFrameRate(frame_rate);
- mRecorder.setVideoSize(video_width, video_height);
- mRecorder.setVideoEncoder(video_encoder);
- mRecorder.setAudioEncoder(audio_encoder);
- mRecorder.setVideoEncodingBitRate(bit_rate);
+ mRecorder.setOutputFile(fileName);
+ mRecorder.setVideoFrameRate(frameRate);
+ mRecorder.setVideoSize(videoWidth, videoHeight);
+ mRecorder.setVideoEncoder(videoEncoder);
+ mRecorder.setAudioEncoder(audioEncoder);
+ mRecorder.setVideoEncodingBitRate(bitRate);
+
Log.v(TAG, "mediaRecorder setPreview");
- mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+ mRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mRecorder.prepare();
mRecorder.start();
- Thread.sleep(record_duration);
+ Thread.sleep(recordDuration);
Log.v(TAG, "Before stop");
mRecorder.stop();
mRecorder.release();
+
//start the playback
MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filename);
+ mp.setDataSource(fileName);
mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
mp.prepare();
mp.start();
- Thread.sleep(record_duration);
+ Thread.sleep(recordDuration);
mp.release();
- validateRecordedVideo(filename);
- if (remove_video) {
- removeRecordedVideo(filename);
+ validateRecordedVideo(fileName);
+ if (removeVideo) {
+ removeRecordedVideo(fileName);
}
- output.write(", " + i);
+ if (i == 0) {
+ mOutput.write(i + 1);
+ } else {
+ mOutput.write(String.format(", %d", (i + 1)));
+ }
}
} catch (Exception e) {
- Log.v(TAG, e.toString());
- assertTrue("record and playback", false);
+ Log.e(TAG, e.toString());
+ fail("Record and playback");
}
- output.write("\n\n");
- output.close();
+ }
+
+ // Record and playback stress test @ 1080P quality
+ @LargeTest
+ public void testStressRecordVideoAndPlayback1080P() throws Exception {
+ recordVideoAndPlayback(CamcorderProfile.QUALITY_1080P);
+ }
+
+ // Record and playback stress test @ 720P quality
+ @LargeTest
+ public void testStressRecordVideoAndPlayback720P() throws Exception {
+ recordVideoAndPlayback(CamcorderProfile.QUALITY_720P);
+ }
+
+ // Record and playback stress test @ 480P quality
+ @LargeTest
+ public void testStressRecordVideoAndPlayback480P() throws Exception {
+ recordVideoAndPlayback(CamcorderProfile.QUALITY_480P);
+ }
+
+ // This test method uses the codec info from the test runner. Use this
+ // for more granular control of video encoding.
+ @LargeTest
+ public void defaultStressRecordVideoAndPlayback() throws Exception {
+ recordVideoAndPlayback(USE_TEST_RUNNER_PROFILE);
}
// Test case for stressing time lapse
@@ -405,21 +458,19 @@
public void testStressTimeLapse() throws Exception {
SurfaceHolder mSurfaceHolder;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
- int record_duration = MediaRecorderStressTestRunner.mTimeLapseDuration;
- boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo;
+ int recordDuration = MediaRecorderStressTestRunner.mTimeLapseDuration;
+ boolean removeVideo = MediaRecorderStressTestRunner.mRemoveVideo;
double captureRate = MediaRecorderStressTestRunner.mCaptureRate;
- String filename;
- File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
- Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
- output.write("Start camera time lapse stress:\n");
- output.write("Total number of loops: " + NUMBER_OF_TIME_LAPSE_LOOPS + "\n");
+ Log.v(TAG, "Start camera time lapse stress:");
+ mOutput.write("Total number of loops: " + NUMBER_OF_TIME_LAPSE_LOOPS + "\n");
try {
- for (int j = 0, n = Camera.getNumberOfCameras(); j < n; j++) {
- output.write("No of loop: camera " + j);
- for (int i = 0; i < NUMBER_OF_TIME_LAPSE_LOOPS; i++) {
- filename = OUTPUT_FILE + j + "_" + i + OUTPUT_FILE_EXT;
- Log.v(TAG, filename);
+ for (int i = 0, n = Camera.getNumberOfCameras(); i < n; i++) {
+ mOutput.write("No of loop: camera " + i);
+ for (int j = 0; j < NUMBER_OF_TIME_LAPSE_LOOPS; j++) {
+ String fileName = String.format("%s/temp%d_%d%s",
+ Environment.getExternalStorageDirectory(), i, j, OUTPUT_FILE_EXT);
+ Log.v(TAG, fileName);
runOnLooper(new Runnable() {
@Override
public void run() {
@@ -438,12 +489,12 @@
CamcorderProfile.get(j, CamcorderProfile.QUALITY_TIME_LAPSE_HIGH);
mRecorder.setProfile(profile);
- // Set the timelapse setting; 0.1 = 10 sec timelapse, 0.5 = 2 sec timelapse, etc.
+ // Set the timelapse setting; 0.1 = 10 sec timelapse, 0.5 = 2 sec timelapse, etc
// http://developer.android.com/guide/topics/media/camera.html#time-lapse-video
mRecorder.setCaptureRate(captureRate);
// Set output file
- mRecorder.setOutputFile(filename);
+ mRecorder.setOutputFile(fileName);
// Set the preview display
Log.v(TAG, "mediaRecorder setPreviewDisplay");
@@ -451,40 +502,40 @@
mRecorder.prepare();
mRecorder.start();
- Thread.sleep(record_duration);
+ Thread.sleep(recordDuration);
Log.v(TAG, "Before stop");
mRecorder.stop();
mRecorder.release();
// Start the playback
MediaPlayer mp = new MediaPlayer();
- mp.setDataSource(filename);
+ mp.setDataSource(fileName);
mp.setDisplay(mSurfaceHolder);
mp.prepare();
mp.start();
Thread.sleep(TIME_LAPSE_PLAYBACK_WAIT_TIME);
mp.release();
- validateRecordedVideo(filename);
- if (remove_video) {
- removeRecordedVideo(filename);
+ validateRecordedVideo(fileName);
+ if (removeVideo) {
+ removeRecordedVideo(fileName);
}
- output.write(", " + i);
+
+ if (j == 0) {
+ mOutput.write(j + 1);
+ } else {
+ mOutput.write(String.format(", %d", (j + 1)));
+ }
}
}
+ } catch (IllegalStateException e) {
+ Log.e(TAG, e.toString());
+ fail("Camera time lapse stress test IllegalStateException");
+ } catch (IOException e) {
+ Log.e(TAG, e.toString());
+ fail("Camera time lapse stress test IOException");
+ } catch (Exception e) {
+ Log.e(TAG, e.toString());
+ fail("Camera time lapse stress test Exception");
}
- catch (IllegalStateException e) {
- assertTrue("Camera time lapse stress test IllegalStateException", false);
- Log.v(TAG, e.toString());
- }
- catch (IOException e) {
- assertTrue("Camera time lapse stress test IOException", false);
- Log.v(TAG, e.toString());
- }
- catch (Exception e) {
- assertTrue("Camera time lapse stress test Exception", false);
- Log.v(TAG, e.toString());
- }
- output.write("\n\n");
- output.close();
}
}
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 82627c0..bfb0931 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -77,6 +77,7 @@
<bool name="def_lockscreen_disabled">false</bool>
<bool name="def_device_provisioned">false</bool>
+ <integer name="def_dock_audio_media_enabled">1</integer>
<!-- Notifications use ringer volume -->
<bool name="def_notifications_use_ring_volume">true</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index fd0b79ff..cccce9d 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2210,6 +2210,9 @@
loadStringSetting(stmt, Settings.Global.WIRELESS_CHARGING_STARTED_SOUND,
R.string.def_wireless_charging_started_sound);
+ loadIntegerSetting(stmt, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
+ R.integer.def_dock_audio_media_enabled);
+
loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
PackageHelper.APP_INSTALL_AUTO);
diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk
index 6026258..262000e 100644
--- a/packages/SystemUI/Android.mk
+++ b/packages/SystemUI/Android.mk
@@ -4,7 +4,8 @@
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
- ../../../ex/carousel/java/com/android/ex/carousel/carousel.rs
+ ../../../ex/carousel/java/com/android/ex/carousel/carousel.rs \
+ src/com/android/systemui/EventLogTags.logtags
LOCAL_JAVA_LIBRARIES := services telephony-common
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..3cc2ab4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..258e49b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..075250a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..b485967
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..a9e0a06
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..b03296c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..2974c2f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..58b84fc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..6a4da0d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..4e2cb12
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..abadd36
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..a644516
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..dd52748
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..ecbed41
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..6471056
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..964574d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..e34a1ab
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..2454d81
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..d3e9a16
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..43bccb3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..071e569
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..b8b298b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..fb633cc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..fb08a0c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..013881f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png
new file mode 100644
index 0000000..f0e3410
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..7c22391
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..a6ed1f9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..d4ecfb9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png
new file mode 100644
index 0000000..bbf897f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png
new file mode 100644
index 0000000..292f5b7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png
new file mode 100644
index 0000000..851892c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png
new file mode 100644
index 0000000..8ad379e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png
new file mode 100644
index 0000000..ca1800c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png
new file mode 100644
index 0000000..1e71680
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png
new file mode 100644
index 0000000..b1cb4b8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png
new file mode 100644
index 0000000..983ba67
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png
new file mode 100644
index 0000000..fa5ffe9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png
new file mode 100644
index 0000000..859adb9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png
new file mode 100644
index 0000000..0d78728
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png
new file mode 100644
index 0000000..5290dc4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png
new file mode 100644
index 0000000..f034fbfd
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png
new file mode 100644
index 0000000..6872ec8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png
new file mode 100644
index 0000000..98520d3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png
new file mode 100644
index 0000000..733563d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png
new file mode 100644
index 0000000..3ac0231
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png
new file mode 100644
index 0000000..50a3078
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png
new file mode 100644
index 0000000..9e353da
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png
new file mode 100644
index 0000000..5ff0ac6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png
new file mode 100644
index 0000000..91ca89a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png
new file mode 100644
index 0000000..784c5da
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png
new file mode 100644
index 0000000..484d4b8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png
new file mode 100644
index 0000000..db06343
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png
new file mode 100644
index 0000000..62130a0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png
new file mode 100644
index 0000000..f2bd618
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png
new file mode 100644
index 0000000..468dec9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png
new file mode 100644
index 0000000..7bbe2cc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png
new file mode 100644
index 0000000..b2f7f59
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..c8020e0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..a968e96
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..712cce4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..5ac3715
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..8b4c97c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..835219c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..7fea77c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..ec861fa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..3bef9e7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..31637c2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..4bedf72
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..0cb5f26
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..c779281
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..7e0f98d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..c258489
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..d479043
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..e1ce328
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..b1d5d5c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..b907713
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..6396b64
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..fd3b644
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..07f514c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..9ccd5aa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..efee374
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..e69f3f7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png
new file mode 100644
index 0000000..f465084
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..dc52a7b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..69f15e3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..bf1f50e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png
new file mode 100644
index 0000000..f6d53bb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png
new file mode 100644
index 0000000..2fec581
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png
new file mode 100644
index 0000000..df46db2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png
new file mode 100644
index 0000000..d556d57
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png
new file mode 100644
index 0000000..546cff9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png
new file mode 100644
index 0000000..0ed7558
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png
new file mode 100644
index 0000000..0f0cf49
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png
new file mode 100644
index 0000000..2ac1a96
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png
new file mode 100644
index 0000000..2625fab
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png
new file mode 100644
index 0000000..17a77b1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png
new file mode 100644
index 0000000..e482a26
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png
new file mode 100644
index 0000000..05628d0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png
new file mode 100644
index 0000000..7dc5d96
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png
new file mode 100644
index 0000000..66b4741
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png
new file mode 100644
index 0000000..f8abf25
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png
new file mode 100644
index 0000000..9be8d23
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png
new file mode 100644
index 0000000..0002165
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png
new file mode 100644
index 0000000..d142737
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png
new file mode 100644
index 0000000..dc31490
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png
new file mode 100644
index 0000000..4e5b7d3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png
new file mode 100644
index 0000000..6acb475
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png
new file mode 100644
index 0000000..509d1752
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png
new file mode 100644
index 0000000..5791615
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png
new file mode 100644
index 0000000..01b27ec
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png
new file mode 100644
index 0000000..c970e0e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png
new file mode 100644
index 0000000..e0b0f9b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png
new file mode 100644
index 0000000..2fb3c2e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png
new file mode 100644
index 0000000..8691360
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png
new file mode 100644
index 0000000..0fe8012
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png
new file mode 100644
index 0000000..db07305
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png
new file mode 100644
index 0000000..4518ad5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png
new file mode 100644
index 0000000..3b6f74ad
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png
new file mode 100644
index 0000000..396d51d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png
new file mode 100644
index 0000000..bb90a95
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png
new file mode 100644
index 0000000..34dc19f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png
new file mode 100644
index 0000000..64c2de2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png
new file mode 100644
index 0000000..9d93d2b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png
new file mode 100644
index 0000000..28ae311
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png
new file mode 100644
index 0000000..cd4f706
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png
new file mode 100644
index 0000000..cbce322
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png
new file mode 100644
index 0000000..6788da8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png
new file mode 100644
index 0000000..0f00fb0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png
new file mode 100644
index 0000000..db05c5f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-hdpi/ic_sysbar_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png
new file mode 100644
index 0000000..9b99940
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png
new file mode 100644
index 0000000..2cd8c90
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png
new file mode 100644
index 0000000..f5363c3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png
new file mode 100644
index 0000000..ded5029
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png
new file mode 100644
index 0000000..01f4eb0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png
new file mode 100644
index 0000000..9963e97
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png
new file mode 100644
index 0000000..3123cc9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png
new file mode 100644
index 0000000..34363fa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png
new file mode 100644
index 0000000..186844c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png
new file mode 100644
index 0000000..680f806
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png
new file mode 100644
index 0000000..4d5bb0b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png
new file mode 100644
index 0000000..253d15c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png
new file mode 100644
index 0000000..5d688aa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png
new file mode 100644
index 0000000..8198fdc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-mdpi/ic_sysbar_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png
new file mode 100644
index 0000000..a8691dc
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png
new file mode 100644
index 0000000..77ade2f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png
new file mode 100644
index 0000000..0974b2c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png
new file mode 100644
index 0000000..4be5612
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png
new file mode 100644
index 0000000..79f8b88
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png
new file mode 100644
index 0000000..6167246
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png
new file mode 100644
index 0000000..d2ecd47
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png
new file mode 100644
index 0000000..92871c3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png
new file mode 100644
index 0000000..4b86ca4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png
new file mode 100644
index 0000000..200d1cb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png
new file mode 100644
index 0000000..f4c5281
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png
new file mode 100644
index 0000000..42e2170
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png
new file mode 100644
index 0000000..eaff2c0
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png
new file mode 100644
index 0000000..9feb041
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-sw720dp-xhdpi/ic_sysbar_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png
new file mode 100644
index 0000000..3f87163
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png
new file mode 100644
index 0000000..5fae5fe
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png
new file mode 100644
index 0000000..24c8fde
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png
new file mode 100644
index 0000000..2e68d0f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png
new file mode 100644
index 0000000..01af7f9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png
new file mode 100644
index 0000000..f5e4b7e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png
new file mode 100644
index 0000000..2368f71
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png
new file mode 100644
index 0000000..eeeed04
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png
new file mode 100644
index 0000000..6188ec3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png
new file mode 100644
index 0000000..cd41a810
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png
new file mode 100644
index 0000000..637c8bb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png
new file mode 100644
index 0000000..c8348d4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png
new file mode 100644
index 0000000..b499d01
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png
new file mode 100644
index 0000000..589f41b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png
new file mode 100644
index 0000000..c756e15
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png
new file mode 100644
index 0000000..0208cdb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png
new file mode 100644
index 0000000..9cd1154
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png
new file mode 100644
index 0000000..01c8876
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png
new file mode 100644
index 0000000..5516e0f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png
new file mode 100644
index 0000000..8f411c3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png
new file mode 100644
index 0000000..ef65b74
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_full_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png
new file mode 100644
index 0000000..6e51ecb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png
new file mode 100644
index 0000000..7c8155c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png
new file mode 100644
index 0000000..fd5f0e52
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png
new file mode 100644
index 0000000..1f04910
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png
new file mode 100644
index 0000000..74b5b92
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_network.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png
new file mode 100644
index 0000000..bcdd82d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_no_signal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png
new file mode 100644
index 0000000..d95b997
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png
new file mode 100644
index 0000000..1e6aef5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_qs_signal_r.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png
new file mode 100644
index 0000000..d3b57c3
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png
new file mode 100644
index 0000000..cc2256f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png
new file mode 100644
index 0000000..e1f1ab9
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png
new file mode 100644
index 0000000..5a04dde
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png
new file mode 100644
index 0000000..65c4fe1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png
new file mode 100644
index 0000000..066405f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png
new file mode 100644
index 0000000..97d5d5b7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_connected_roam.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png
new file mode 100644
index 0000000..a3d2b35
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_1x.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png
new file mode 100644
index 0000000..8e13caa
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_3g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png
new file mode 100644
index 0000000..23fcf42
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_4g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png
new file mode 100644
index 0000000..4370c22
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_e.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png
new file mode 100644
index 0000000..3504a75
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_g.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png
new file mode 100644
index 0000000..21fc58c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_data_fully_connected_h.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png
new file mode 100644
index 0000000..629b5f8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_silent.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png
new file mode 100644
index 0000000..8e3e8b4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_ringer_vibrate.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png
new file mode 100644
index 0000000..62d1d34
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png
new file mode 100644
index 0000000..b263831
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_0_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png
new file mode 100644
index 0000000..6f9620e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png
new file mode 100644
index 0000000..7adae9f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_1_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png
new file mode 100644
index 0000000..906b418
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png
new file mode 100644
index 0000000..ebdf136
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_2_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png
new file mode 100644
index 0000000..1a2ab1c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png
new file mode 100644
index 0000000..c0170a6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_3_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png
new file mode 100644
index 0000000..2cc587b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png
new file mode 100644
index 0000000..11a26c6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_4_fully.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png
new file mode 100644
index 0000000..3afb5b2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_in.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png
new file mode 100644
index 0000000..fcf7f6e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_inout.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png
new file mode 100644
index 0000000..815de33
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_null.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png
new file mode 100644
index 0000000..f153216
--- /dev/null
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/stat_sys_signal_out.png
Binary files differ
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index d619de1..0789b29 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -133,7 +133,7 @@
<string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"No hay tarjeta SIM."</string>
<string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Conexión mediante Bluetooth"</string>
- <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo de avión"</string>
+ <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modo avión"</string>
<!-- String.format failed for translation -->
<!-- no translation found for accessibility_battery_level (7451474187113371965) -->
<skip />
@@ -154,7 +154,7 @@
<string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
<string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Móvil <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
<string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
- <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo de avión <xliff:g id="STATE">%s</xliff:g>"</string>
+ <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
<string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index ccf4fd48..81ac841 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -77,7 +77,7 @@
<string name="use_ptp_button_title" msgid="7517127540301625751">"Установить как камеру (PTP)"</string>
<string name="installer_cd_button_title" msgid="2312667578562201583">"Установить приложение"</string>
<string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
- <string name="accessibility_home" msgid="8217216074895377641">"Главная страница"</string>
+ <string name="accessibility_home" msgid="8217216074895377641">"Домой"</string>
<string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
<string name="accessibility_recent" msgid="8571350598987952883">"Недавние приложения"</string>
<string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string>
diff --git a/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
new file mode 100644
index 0000000..aa32e9c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/EventLogTags.logtags
@@ -0,0 +1,33 @@
+# See system/core/logcat/event.logtags for a description of the format of this file.
+
+option java_package com.android.systemui;
+
+# ---------------------------
+# PhoneStatusBar.java
+# ---------------------------
+36000 sysui_statusbar_touch (type|1),(x|1),(y|1),(enabled|1)
+
+# ---------------------------
+# PhoneStatusBarView.java
+# ---------------------------
+36010 sysui_panelbar_touch (type|1),(x|1),(y|1),(enabled|1)
+
+# ---------------------------
+# NotificationPanelView.java
+# ---------------------------
+36020 sysui_notificationpanel_touch (type|1),(x|1),(y|1)
+
+# ---------------------------
+# SettingsPanelView.java
+# ---------------------------
+36030 sysui_quickpanel_touch (type|1),(x|1),(y|1)
+
+# ---------------------------
+# PanelHolder.java
+# ---------------------------
+36040 sysui_panelholder_touch (type|1),(x|1),(y|1)
+
+# ---------------------------
+# SearchPanelView.java
+# ---------------------------
+36050 sysui_searchpanel_touch (type|1),(x|1),(y|1)
diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
index daac9ed..c0a6f56 100644
--- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
@@ -31,6 +31,7 @@
import android.os.Vibrator;
import android.provider.Settings;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.util.Slog;
import android.view.IWindowManager;
import android.view.MotionEvent;
@@ -42,6 +43,8 @@
import com.android.internal.widget.multiwaveview.GlowPadView;
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
+
+import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.recent.StatusBarTouchProxy;
import com.android.systemui.statusbar.BaseStatusBar;
@@ -55,6 +58,7 @@
private static final int SEARCH_PANEL_HOLD_DURATION = 0;
static final String TAG = "SearchPanelView";
static final boolean DEBUG = TabletStatusBar.DEBUG || PhoneStatusBar.DEBUG || false;
+ public static final boolean DEBUG_GESTURES = true;
private static final String ASSIST_ICON_METADATA_NAME =
"com.android.systemui.action_assist_icon";
private final Context mContext;
@@ -304,6 +308,17 @@
}
}
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_SEARCHPANEL_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY());
+ }
+ }
+ return super.onTouchEvent(event);
+ }
+
private LayoutTransition createLayoutTransitioner() {
LayoutTransition transitioner = new LayoutTransition();
transitioner.setDuration(200);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index 6424a71..baaefab 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -148,10 +148,14 @@
if (mWifiGroup == null) return;
if (mWifiVisible) {
- mWifiGroup.setVisibility(View.VISIBLE);
+ mWifi.setImageDrawable(null);
+ mWifiActivity.setImageDrawable(null);
+
mWifi.setImageResource(mWifiStrengthId);
mWifiActivity.setImageResource(mWifiActivityId);
+
mWifiGroup.setContentDescription(mWifiDescription);
+ mWifiGroup.setVisibility(View.VISIBLE);
} else {
mWifiGroup.setVisibility(View.GONE);
}
@@ -162,11 +166,16 @@
mWifiStrengthId, mWifiActivityId));
if (mMobileVisible && !mIsAirplaneMode) {
- mMobileGroup.setVisibility(View.VISIBLE);
+ mMobile.setImageDrawable(null);
+ mMobileActivity.setImageDrawable(null);
+ mMobileType.setImageDrawable(null);
+
mMobile.setImageResource(mMobileStrengthId);
mMobileActivity.setImageResource(mMobileActivityId);
mMobileType.setImageResource(mMobileTypeId);
+
mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription);
+ mMobileGroup.setVisibility(View.VISIBLE);
} else {
mMobileGroup.setVisibility(View.GONE);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index dbc55c8..39d56a4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -118,12 +118,7 @@
mIcon = icon.clone();
setContentDescription(icon.contentDescription);
if (!iconEquals) {
- Drawable drawable = getIcon(icon);
- if (drawable == null) {
- Slog.w(TAG, "No icon for slot " + mSlot);
- return false;
- }
- setImageDrawable(drawable);
+ if (!updateDrawable(false /* no clear */)) return false;
}
if (!levelEquals) {
setImageLevel(icon.iconLevel);
@@ -149,6 +144,23 @@
return true;
}
+ public void updateDrawable() {
+ updateDrawable(true /* with clear */);
+ }
+
+ private boolean updateDrawable(boolean withClear) {
+ Drawable drawable = getIcon(mIcon);
+ if (drawable == null) {
+ Slog.w(TAG, "No icon for slot " + mSlot);
+ return false;
+ }
+ if (withClear) {
+ setImageDrawable(null);
+ }
+ setImageDrawable(drawable);
+ return true;
+ }
+
private Drawable getIcon(StatusBarIcon icon) {
return getIcon(getContext(), icon);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 2bad353..ff36485 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -21,14 +21,17 @@
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.util.Slog;
import android.view.MotionEvent;
import android.view.View;
+import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.statusbar.GestureRecorder;
public class NotificationPanelView extends PanelView {
+ public static final boolean DEBUG_GESTURES = true;
Drawable mHandleBar;
int mHandleBarHeight;
@@ -91,6 +94,12 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_NOTIFICATIONPANEL_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY());
+ }
+ }
if (PhoneStatusBar.SETTINGS_DRAG_SHORTCUT && mStatusBar.mHasFlipSettings) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java
index 8a54347..c229a09 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelHolder.java
@@ -18,10 +18,14 @@
import android.content.Context;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.view.MotionEvent;
import android.widget.FrameLayout;
+import com.android.systemui.EventLogTags;
+
public class PanelHolder extends FrameLayout {
+ public static final boolean DEBUG_GESTURES = true;
private int mSelectedPanelIndex = -1;
private PanelBar mBar;
@@ -67,6 +71,12 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_PANELHOLDER_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY());
+ }
+ }
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
PanelBar.LOG("PanelHolder got touch in open air, closing panels");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index fea1a05..3227a34 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -52,6 +52,7 @@
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.util.DisplayMetrics;
+import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
import android.view.Display;
@@ -76,6 +77,7 @@
import com.android.internal.statusbar.StatusBarIcon;
import com.android.internal.statusbar.StatusBarNotification;
+import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.CommandQueue;
@@ -103,7 +105,7 @@
public static final boolean DEBUG = BaseStatusBar.DEBUG;
public static final boolean SPEW = DEBUG;
public static final boolean DUMPTRUCK = true; // extra dumpsys info
- public static final boolean DEBUG_GESTURES = false;
+ public static final boolean DEBUG_GESTURES = true;
public static final boolean DEBUG_CLINGS = false;
@@ -835,6 +837,16 @@
mWindowManager.addView(mIntruderAlertView, lp);
}
+ public void refreshAllStatusBarIcons() {
+ final int count = mStatusIcons.getChildCount();
+ for (int n = 0; n < count; n++) {
+ View child = mStatusIcons.getChildAt(n);
+ if (child instanceof StatusBarIconView) {
+ ((StatusBarIconView) child).updateDrawable();
+ }
+ }
+ }
+
public void addIcon(String slot, int index, int viewIndex, StatusBarIcon icon) {
if (SPEW) Slog.d(TAG, "addIcon slot=" + slot + " index=" + index + " viewIndex=" + viewIndex
+ " icon=" + icon);
@@ -982,6 +994,8 @@
mNotificationButton.setImageDrawable(null);
mNotificationButton.setImageResource(R.drawable.ic_notifications);
}
+
+ refreshAllStatusBarIcons();
}
private void updateShowSearchHoldoff() {
@@ -1775,6 +1789,14 @@
}
public boolean interceptTouchEvent(MotionEvent event) {
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_STATUSBAR_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY(), mDisabled);
+ }
+
+ }
+
if (SPEW) {
Slog.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
+ mDisabled + " mTracking=" + mTracking);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index 571544b..de9f750 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -22,15 +22,19 @@
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.util.Slog;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
+
+import com.android.systemui.EventLogTags;
import com.android.systemui.R;
public class PhoneStatusBarView extends PanelBar {
private static final String TAG = "PhoneStatusBarView";
private static final boolean DEBUG = PhoneStatusBar.DEBUG;
+ private static final boolean DEBUG_GESTURES = true;
PhoneStatusBar mBar;
int mScrimColor;
@@ -175,7 +179,17 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
- return mBar.interceptTouchEvent(event) || super.onTouchEvent(event);
+ boolean barConsumedEvent = mBar.interceptTouchEvent(event);
+
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY(),
+ barConsumedEvent ? 1 : 0);
+ }
+ }
+
+ return barConsumedEvent || super.onTouchEvent(event);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
index bbb8455..2314d93 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
@@ -23,10 +23,13 @@
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.EventLog;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import com.android.systemui.EventLogTags;
import com.android.systemui.R;
import com.android.systemui.statusbar.BaseStatusBar;
import com.android.systemui.statusbar.GestureRecorder;
@@ -36,6 +39,7 @@
import com.android.systemui.statusbar.policy.NetworkController;
public class SettingsPanelView extends PanelView {
+ public static final boolean DEBUG_GESTURES = true;
private QuickSettings mQS;
private QuickSettingsContainerView mQSContainer;
@@ -136,4 +140,15 @@
mHandleBar.draw(canvas);
canvas.translate(0, -off);
}
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (DEBUG_GESTURES) {
+ if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
+ EventLog.writeEvent(EventLogTags.SYSUI_QUICKPANEL_TOUCH,
+ event.getActionMasked(), (int) event.getX(), (int) event.getY());
+ }
+ }
+ return super.onTouchEvent(event);
+ }
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 5bf7e21..dfc9044 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -1711,31 +1711,40 @@
static final boolean PRINT_ANIM = false;
/** {@inheritDoc} */
+ @Override
public int selectAnimationLw(WindowState win, int transit) {
if (PRINT_ANIM) Log.i(TAG, "selectAnimation in " + win
+ ": transit=" + transit);
if (win == mStatusBar) {
- if (transit == TRANSIT_EXIT || transit == TRANSIT_HIDE) {
+ if (transit == TRANSIT_EXIT
+ || transit == TRANSIT_HIDE) {
return R.anim.dock_top_exit;
- } else if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) {
+ } else if (transit == TRANSIT_ENTER
+ || transit == TRANSIT_SHOW) {
return R.anim.dock_top_enter;
}
} else if (win == mNavigationBar) {
// This can be on either the bottom or the right.
if (mNavigationBarOnBottom) {
- if (transit == TRANSIT_EXIT || transit == TRANSIT_HIDE) {
+ if (transit == TRANSIT_EXIT
+ || transit == TRANSIT_HIDE) {
return R.anim.dock_bottom_exit;
- } else if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) {
+ } else if (transit == TRANSIT_ENTER
+ || transit == TRANSIT_SHOW) {
return R.anim.dock_bottom_enter;
}
} else {
- if (transit == TRANSIT_EXIT || transit == TRANSIT_HIDE) {
+ if (transit == TRANSIT_EXIT
+ || transit == TRANSIT_HIDE) {
return R.anim.dock_right_exit;
- } else if (transit == TRANSIT_ENTER || transit == TRANSIT_SHOW) {
+ } else if (transit == TRANSIT_ENTER
+ || transit == TRANSIT_SHOW) {
return R.anim.dock_right_enter;
}
}
- } if (transit == TRANSIT_PREVIEW_DONE) {
+ }
+
+ if (transit == TRANSIT_PREVIEW_DONE) {
if (win.hasAppShownWindows()) {
if (PRINT_ANIM) Log.i(TAG, "**** STARTING EXIT");
return com.android.internal.R.anim.app_starting_exit;
@@ -4568,71 +4577,6 @@
return true;
}
- /**
- * Returns the human readable name of a window transition.
- *
- * @param transition The window transition.
- * @return The transition symbolic name.
- */
- public static String windowTransitionToString(int transition) {
- switch (transition) {
- case WindowManagerPolicy.TRANSIT_UNSET: {
- return "TRANSIT_UNSET";
- }
- case WindowManagerPolicy.TRANSIT_NONE: {
- return "TRANSIT_NONE";
- }
- case WindowManagerPolicy.TRANSIT_ENTER: {
- return "TRANSIT_ENTER";
- }
- case WindowManagerPolicy.TRANSIT_EXIT: {
- return "TRANSIT_EXIT";
- }
- case WindowManagerPolicy.TRANSIT_SHOW: {
- return "TRANSIT_SHOW";
- }
- case WindowManagerPolicy.TRANSIT_EXIT_MASK: {
- return "TRANSIT_EXIT_MASK";
- }
- case WindowManagerPolicy.TRANSIT_PREVIEW_DONE: {
- return "TRANSIT_PREVIEW_DONE";
- }
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN: {
- return "TRANSIT_ACTIVITY_OPEN";
- }
- case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE: {
- return "TRANSIT_ACTIVITY_CLOSE";
- }
- case WindowManagerPolicy.TRANSIT_TASK_OPEN: {
- return "TRANSIT_TASK_OPEN";
- }
- case WindowManagerPolicy.TRANSIT_TASK_CLOSE: {
- return "TRANSIT_TASK_CLOSE";
- }
- case WindowManagerPolicy.TRANSIT_TASK_TO_FRONT: {
- return "TRANSIT_TASK_TO_FRONT";
- }
- case WindowManagerPolicy.TRANSIT_TASK_TO_BACK: {
- return "TRANSIT_TASK_TO_BACK";
- }
- case WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE: {
- return "TRANSIT_WALLPAPER_CLOSE";
- }
- case WindowManagerPolicy.TRANSIT_WALLPAPER_OPEN: {
- return "TRANSIT_WALLPAPER_OPEN";
- }
- case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN: {
- return "TRANSIT_WALLPAPER_INTRA_OPEN";
- }
- case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_CLOSE: {
- return "TRANSIT_WALLPAPER_INTRA_CLOSE";
- }
- default: {
- return "<UNKNOWN>";
- }
- }
- }
-
@Override
public void dump(String prefix, PrintWriter pw, String[] args) {
pw.print(prefix); pw.print("mSafeMode="); pw.print(mSafeMode);
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
index de3354a..4df434c 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
@@ -197,7 +197,7 @@
}
@Override
- public void onUserSwitched(int userId) {
+ public void onUserSwitching(int userId) {
if (DEBUG) Log.d(TAG, "onUserSwitched(" + userId + ")");
if (mBiometricUnlock != null) {
mBiometricUnlock.stop();
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
index b05d111..217e5d7 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -101,9 +101,12 @@
private boolean mSafeModeEnabled;
private boolean mUserSetupCompleted;
+
// User for whom this host view was created
private int mUserId;
+ private KeyguardMultiUserSelectorView mKeyguardMultiUserSelectorView;
+
/*package*/ interface TransportCallback {
void onListenerDetached();
void onListenerAttached();
@@ -209,6 +212,12 @@
mCleanupAppWidgetsOnBootCompleted = false;
}
}
+ @Override
+ public void onUserSwitchComplete(int userId) {
+ if (mKeyguardMultiUserSelectorView != null) {
+ mKeyguardMultiUserSelectorView.finalizeActiveUserView(true);
+ }
+ }
};
private SlidingChallengeLayout mSlidingChallengeLayout;
@@ -399,6 +408,12 @@
}
};
+ public void initializeSwitchingUserState(boolean switching) {
+ if (!switching && mKeyguardMultiUserSelectorView != null) {
+ mKeyguardMultiUserSelectorView.finalizeActiveUserView(false);
+ }
+ }
+
public void userActivity() {
if (mViewMediatorCallback != null) {
mViewMediatorCallback.userActivity();
@@ -1452,10 +1467,9 @@
if (users.size() > 1) {
if (multiUserView instanceof KeyguardMultiUserSelectorView) {
- KeyguardMultiUserSelectorView multiUser =
- (KeyguardMultiUserSelectorView) multiUserView;
- multiUser.setVisibility(View.VISIBLE);
- multiUser.addUsers(users);
+ mKeyguardMultiUserSelectorView = (KeyguardMultiUserSelectorView) multiUserView;
+ mKeyguardMultiUserSelectorView.setVisibility(View.VISIBLE);
+ mKeyguardMultiUserSelectorView.addUsers(users);
UserSwitcherCallback callback = new UserSwitcherCallback() {
@Override
public void hideSecurityView(int duration) {
@@ -1481,7 +1495,7 @@
}
}
};
- multiUser.setCallback(callback);
+ mKeyguardMultiUserSelectorView.setCallback(callback);
} else {
Throwable t = new Throwable();
t.fillInStackTrace();
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
index 7bf2bf9..9d1f041 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
@@ -69,6 +69,7 @@
private boolean mInit = true;
private KeyguardMultiUserSelectorView mUserSelector;
private KeyguardCircleFramedDrawable mFramed;
+ private boolean mPressLock;
public static KeyguardMultiUserAvatar fromXml(int resId, Context context,
KeyguardMultiUserSelectorView userSelector, UserInfo info) {
@@ -212,13 +213,22 @@
@Override
public void setPressed(boolean pressed) {
- if (!pressed || isClickable()) {
+ if (mPressLock && !pressed) {
+ return;
+ }
+
+ if (mPressLock || !pressed || isClickable()) {
super.setPressed(pressed);
mFramed.setPressed(pressed);
mUserImage.invalidate();
}
}
+ public void lockPressed(boolean pressed) {
+ mPressLock = pressed;
+ setPressed(pressed);
+ }
+
public UserInfo getUserInfo() {
return mUserInfo;
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
index 728e87c..f9ea5bb 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserSelectorView.java
@@ -81,11 +81,28 @@
KeyguardMultiUserAvatar uv = createAndAddUser(user);
if (user.id == activeUser.id) {
mActiveUserAvatar = uv;
- mActiveUserAvatar.setActive(true, false, null);
- } else {
- uv.setActive(false, false, null);
}
+ uv.setActive(false, false, null);
}
+ mActiveUserAvatar.lockPressed(true);
+ }
+
+ public void finalizeActiveUserView(boolean animate) {
+ if (animate) {
+ getHandler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ finalizeActiveUserNow(true);
+ }
+ }, 500);
+ } else {
+ finalizeActiveUserNow(animate);
+ }
+ }
+
+ void finalizeActiveUserNow(boolean animate) {
+ mActiveUserAvatar.lockPressed(false);
+ mActiveUserAvatar.setActive(true, animate, null);
}
Comparator<UserInfo> mOrderAddedComparator = new Comparator<UserInfo>() {
@@ -132,25 +149,21 @@
// Reset the previously active user to appear inactive
mCallback.hideSecurityView(FADE_OUT_ANIMATION_DURATION);
setAllClickable(false);
+ avatar.lockPressed(true);
mActiveUserAvatar.setActive(false, true, new Runnable() {
@Override
public void run() {
mActiveUserAvatar = avatar;
- mActiveUserAvatar.setActive(true, true, new Runnable() {
- @Override
- public void run() {
- if (this.getClass().getName().contains("internal")) {
- try {
- ActivityManagerNative.getDefault()
- .switchUser(avatar.getUserInfo().id);
- } catch (RemoteException re) {
- Log.e(TAG, "Couldn't switch user " + re);
- }
- } else {
- setAllClickable(true);
- }
+ if (this.getClass().getName().contains("internal")) {
+ try {
+ ActivityManagerNative.getDefault()
+ .switchUser(avatar.getUserInfo().id);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Couldn't switch user " + re);
}
- });
+ } else {
+ setAllClickable(true);
+ }
}
});
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java
index 35b8509..0edb7a13 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardStatusView.java
@@ -141,8 +141,7 @@
}
private void maybeSetUpperCaseText(TextView textView, CharSequence text) {
- if (KeyguardViewManager.USE_UPPER_CASE
- && textView.getId() != R.id.owner_info) { // currently only required for date view
+ if (KeyguardViewManager.USE_UPPER_CASE) {
textView.setText(text != null ? text.toString().toUpperCase() : null);
} else {
textView.setText(text);
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
index ad6f55c..c9bffbe 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java
@@ -79,10 +79,11 @@
private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307;
private static final int MSG_DEVICE_PROVISIONED = 308;
private static final int MSG_DPM_STATE_CHANGED = 309;
- private static final int MSG_USER_SWITCHED = 310;
+ private static final int MSG_USER_SWITCHING = 310;
private static final int MSG_USER_REMOVED = 311;
private static final int MSG_KEYGUARD_VISIBILITY_CHANGED = 312;
protected static final int MSG_BOOT_COMPLETED = 313;
+ private static final int MSG_USER_SWITCH_COMPLETE = 314;
private static KeyguardUpdateMonitor sInstance;
@@ -147,8 +148,11 @@
case MSG_DPM_STATE_CHANGED:
handleDevicePolicyManagerStateChanged();
break;
- case MSG_USER_SWITCHED:
- handleUserSwitched(msg.arg1, (IRemoteCallback)msg.obj);
+ case MSG_USER_SWITCHING:
+ handleUserSwitching(msg.arg1, (IRemoteCallback)msg.obj);
+ break;
+ case MSG_USER_SWITCH_COMPLETE:
+ handleUserSwitchComplete(msg.arg1);
break;
case MSG_USER_REMOVED:
handleUserRemoved(msg.arg1);
@@ -359,11 +363,13 @@
new IUserSwitchObserver.Stub() {
@Override
public void onUserSwitching(int newUserId, IRemoteCallback reply) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHED,
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHING,
newUserId, 0, reply));
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCH_COMPLETE,
+ newUserId));
}
});
} catch (RemoteException e) {
@@ -418,13 +424,13 @@
}
/**
- * Handle {@link #MSG_USER_SWITCHED}
+ * Handle {@link #MSG_USER_SWITCHING}
*/
- protected void handleUserSwitched(int userId, IRemoteCallback reply) {
+ protected void handleUserSwitching(int userId, IRemoteCallback reply) {
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
- cb.onUserSwitched(userId);
+ cb.onUserSwitching(userId);
}
}
setAlternateUnlockEnabled(false);
@@ -435,6 +441,18 @@
}
/**
+ * Handle {@link #MSG_USER_SWITCH_COMPLETE}
+ */
+ protected void handleUserSwitchComplete(int userId) {
+ for (int i = 0; i < mCallbacks.size(); i++) {
+ KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
+ if (cb != null) {
+ cb.onUserSwitchComplete(userId);
+ }
+ }
+ }
+
+ /**
* Handle {@link #MSG_BOOT_COMPLETED}
*/
protected void handleBootCompleted() {
@@ -456,7 +474,7 @@
}
/**
- * Handle {@link #MSG_USER_SWITCHED}
+ * Handle {@link #MSG_USER_REMOVED}
*/
protected void handleUserRemoved(int userId) {
for (int i = 0; i < mCallbacks.size(); i++) {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
index 1ba1388..2126f06 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitorCallback.java
@@ -85,9 +85,14 @@
void onDevicePolicyManagerStateChanged() { }
/**
- * Called when the user changes.
+ * Called when the user change begins.
*/
- void onUserSwitched(int userId) { }
+ void onUserSwitching(int userId) { }
+
+ /**
+ * Called when the user change is complete.
+ */
+ void onUserSwitchComplete(int userId) { }
/**
* Called when the SIM state changes.
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
index ff136b1..8562f0c 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
@@ -53,6 +53,7 @@
private final static boolean DEBUG = KeyguardViewMediator.DEBUG;
private static String TAG = "KeyguardViewManager";
public static boolean USE_UPPER_CASE = true;
+ public final static String IS_SWITCHING_USER = "is_switching_user";
// Timeout used for keypresses
static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
@@ -237,6 +238,8 @@
mKeyguardView = (KeyguardHostView) view.findViewById(R.id.keyguard_host_view);
mKeyguardView.setLockPatternUtils(mLockPatternUtils);
mKeyguardView.setViewMediatorCallback(mViewMediatorCallback);
+ mKeyguardView.initializeSwitchingUserState(options != null &&
+ options.getBoolean(IS_SWITCHING_USER));
// HACK
// The keyguard view will have set up window flags in onFinishInflate before we set
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
index 7d757ff..fef0613 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
@@ -153,6 +153,7 @@
private StatusBarManager mStatusBarManager;
private boolean mShowLockIcon;
private boolean mShowingLockIcon;
+ private boolean mSwitchingUser;
private boolean mSystemReady;
@@ -310,11 +311,12 @@
KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
@Override
- public void onUserSwitched(int userId) {
+ public void onUserSwitching(int userId) {
// Note that the mLockPatternUtils user has already been updated from setCurrentUser.
// We need to force a reset of the views, since lockNow (called by
// ActivityManagerService) will not reconstruct the keyguard if it is already showing.
synchronized (KeyguardViewMediator.this) {
+ mSwitchingUser = true;
resetStateLocked(null);
adjustStatusBarLocked();
// Disable face unlock when the user switches.
@@ -323,6 +325,11 @@
}
@Override
+ public void onUserSwitchComplete(int userId) {
+ mSwitchingUser = false;
+ }
+
+ @Override
public void onUserRemoved(int userId) {
mLockPatternUtils.removeUser(userId);
}
@@ -1361,6 +1368,10 @@
* @see #RESET
*/
private void handleReset(Bundle options) {
+ if (options == null) {
+ options = new Bundle();
+ }
+ options.putBoolean(KeyguardViewManager.IS_SWITCHING_USER, mSwitchingUser);
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleReset");
mKeyguardViewManager.reset(options);
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/AccountUnlockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/AccountUnlockScreen.java
deleted file mode 100644
index d6a31b8..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/AccountUnlockScreen.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.OperationCanceledException;
-import android.accounts.AccountManagerFuture;
-import android.accounts.AuthenticatorException;
-import android.accounts.AccountManagerCallback;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.text.Editable;
-import android.text.InputFilter;
-import android.text.LoginFilter;
-import android.text.TextWatcher;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.os.Bundle;
-
-import java.io.IOException;
-
-/**
- * When the user forgets their password a bunch of times, we fall back on their
- * account's login/password to unlock the phone (and reset their lock pattern).
- */
-public class AccountUnlockScreen extends RelativeLayout implements KeyguardScreen,
- View.OnClickListener, TextWatcher {
- private static final String LOCK_PATTERN_PACKAGE = "com.android.settings";
- private static final String LOCK_PATTERN_CLASS = LOCK_PATTERN_PACKAGE + ".ChooseLockGeneric";
-
- /**
- * The amount of millis to stay awake once this screen detects activity
- */
- private static final int AWAKE_POKE_MILLIS = 30000;
-
- private KeyguardScreenCallback mCallback;
- private LockPatternUtils mLockPatternUtils;
- private KeyguardUpdateMonitor mUpdateMonitor;
-
- private TextView mTopHeader;
- private TextView mInstructions;
- private EditText mLogin;
- private EditText mPassword;
- private Button mOk;
-
- /**
- * Shown while making asynchronous check of password.
- */
- private ProgressDialog mCheckingDialog;
- private KeyguardStatusViewManager mKeyguardStatusViewManager;
-
- /**
- * AccountUnlockScreen constructor.
- * @param configuration
- * @param updateMonitor
- */
- public AccountUnlockScreen(Context context, Configuration configuration,
- KeyguardUpdateMonitor updateMonitor, KeyguardScreenCallback callback,
- LockPatternUtils lockPatternUtils) {
- super(context);
- mCallback = callback;
- mLockPatternUtils = lockPatternUtils;
-
- LayoutInflater.from(context).inflate(
- R.layout.keyguard_screen_glogin_unlock, this, true);
-
- mTopHeader = (TextView) findViewById(R.id.topHeader);
- mTopHeader.setText(mLockPatternUtils.isPermanentlyLocked() ?
- R.string.lockscreen_glogin_too_many_attempts :
- R.string.lockscreen_glogin_forgot_pattern);
-
- mInstructions = (TextView) findViewById(R.id.instructions);
-
- mLogin = (EditText) findViewById(R.id.login);
- mLogin.setFilters(new InputFilter[] { new LoginFilter.UsernameFilterGeneric() } );
- mLogin.addTextChangedListener(this);
-
- mPassword = (EditText) findViewById(R.id.password);
- mPassword.addTextChangedListener(this);
-
- mOk = (Button) findViewById(R.id.ok);
- mOk.setOnClickListener(this);
-
- mUpdateMonitor = updateMonitor;
-
- mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockPatternUtils, callback, true);
- }
-
- public void afterTextChanged(Editable s) {
- }
-
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- mCallback.pokeWakelock(AWAKE_POKE_MILLIS);
- }
-
- @Override
- protected boolean onRequestFocusInDescendants(int direction,
- Rect previouslyFocusedRect) {
- // send focus to the login field
- return mLogin.requestFocus(direction, previouslyFocusedRect);
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return true;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mKeyguardStatusViewManager.onPause();
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- // start fresh
- mLogin.setText("");
- mPassword.setText("");
- mLogin.requestFocus();
- mKeyguardStatusViewManager.onResume();
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- if (mCheckingDialog != null) {
- mCheckingDialog.hide();
- }
- mUpdateMonitor.removeCallback(this); // this must be first
- mCallback = null;
- mLockPatternUtils = null;
- mUpdateMonitor = null;
- }
-
- /** {@inheritDoc} */
- public void onClick(View v) {
- mCallback.pokeWakelock();
- if (v == mOk) {
- asyncCheckPassword();
- }
- }
-
- private void postOnCheckPasswordResult(final boolean success) {
- // ensure this runs on UI thread
- mLogin.post(new Runnable() {
- public void run() {
- if (success) {
- // clear out forgotten password
- mLockPatternUtils.setPermanentlyLocked(false);
- mLockPatternUtils.setLockPatternEnabled(false);
- mLockPatternUtils.saveLockPattern(null);
-
- // launch the 'choose lock pattern' activity so
- // the user can pick a new one if they want to
- Intent intent = new Intent();
- intent.setClassName(LOCK_PATTERN_PACKAGE, LOCK_PATTERN_CLASS);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(intent);
- mCallback.reportSuccessfulUnlockAttempt();
-
- // close the keyguard
- mCallback.keyguardDone(true);
- } else {
- mInstructions.setText(R.string.lockscreen_glogin_invalid_input);
- mPassword.setText("");
- mCallback.reportFailedUnlockAttempt();
- }
- }
- });
- }
-
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN
- && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
- if (mLockPatternUtils.isPermanentlyLocked()) {
- mCallback.goToLockScreen();
- } else {
- mCallback.forgotPattern(false);
- }
- return true;
- }
- return super.dispatchKeyEvent(event);
- }
-
- /**
- * Given the string the user entered in the 'username' field, find
- * the stored account that they probably intended. Prefer, in order:
- *
- * - an exact match for what was typed, or
- * - a case-insensitive match for what was typed, or
- * - if they didn't include a domain, an exact match of the username, or
- * - if they didn't include a domain, a case-insensitive
- * match of the username.
- *
- * If there is a tie for the best match, choose neither --
- * the user needs to be more specific.
- *
- * @return an account name from the database, or null if we can't
- * find a single best match.
- */
- private Account findIntendedAccount(String username) {
- Account[] accounts = AccountManager.get(mContext).getAccountsByType("com.google");
-
- // Try to figure out which account they meant if they
- // typed only the username (and not the domain), or got
- // the case wrong.
-
- Account bestAccount = null;
- int bestScore = 0;
- for (Account a: accounts) {
- int score = 0;
- if (username.equals(a.name)) {
- score = 4;
- } else if (username.equalsIgnoreCase(a.name)) {
- score = 3;
- } else if (username.indexOf('@') < 0) {
- int i = a.name.indexOf('@');
- if (i >= 0) {
- String aUsername = a.name.substring(0, i);
- if (username.equals(aUsername)) {
- score = 2;
- } else if (username.equalsIgnoreCase(aUsername)) {
- score = 1;
- }
- }
- }
- if (score > bestScore) {
- bestAccount = a;
- bestScore = score;
- } else if (score == bestScore) {
- bestAccount = null;
- }
- }
- return bestAccount;
- }
-
- private void asyncCheckPassword() {
- mCallback.pokeWakelock(AWAKE_POKE_MILLIS);
- final String login = mLogin.getText().toString();
- final String password = mPassword.getText().toString();
- Account account = findIntendedAccount(login);
- if (account == null) {
- postOnCheckPasswordResult(false);
- return;
- }
- getProgressDialog().show();
- Bundle options = new Bundle();
- options.putString(AccountManager.KEY_PASSWORD, password);
- AccountManager.get(mContext).confirmCredentials(account, options, null /* activity */,
- new AccountManagerCallback<Bundle>() {
- public void run(AccountManagerFuture<Bundle> future) {
- try {
- mCallback.pokeWakelock(AWAKE_POKE_MILLIS);
- final Bundle result = future.getResult();
- final boolean verified = result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT);
- postOnCheckPasswordResult(verified);
- } catch (OperationCanceledException e) {
- postOnCheckPasswordResult(false);
- } catch (IOException e) {
- postOnCheckPasswordResult(false);
- } catch (AuthenticatorException e) {
- postOnCheckPasswordResult(false);
- } finally {
- mLogin.post(new Runnable() {
- public void run() {
- getProgressDialog().hide();
- }
- });
- }
- }
- }, null /* handler */);
- }
-
- private Dialog getProgressDialog() {
- if (mCheckingDialog == null) {
- mCheckingDialog = new ProgressDialog(mContext);
- mCheckingDialog.setMessage(
- mContext.getString(R.string.lockscreen_glogin_checking_password));
- mCheckingDialog.setIndeterminate(true);
- mCheckingDialog.setCancelable(false);
- mCheckingDialog.getWindow().setType(
- WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- }
- return mCheckingDialog;
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/BiometricSensorUnlock.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/BiometricSensorUnlock.java
deleted file mode 100644
index c38525e..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/BiometricSensorUnlock.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.view.View;
-
-interface BiometricSensorUnlock {
- /**
- * Initializes the view provided for the biometric unlock UI to work within. The provided area
- * completely covers the backup unlock mechanism.
- * @param biometricUnlockView View provided for the biometric unlock UI.
- */
- public void initializeView(View biometricUnlockView);
-
- /**
- * Indicates whether the biometric unlock is running. Before
- * {@link BiometricSensorUnlock#start} is called, isRunning() returns false. After a successful
- * call to {@link BiometricSensorUnlock#start}, isRunning() returns true until the biometric
- * unlock completes, {@link BiometricSensorUnlock#stop} has been called, or an error has
- * forced the biometric unlock to stop.
- * @return whether the biometric unlock is currently running.
- */
- public boolean isRunning();
-
- /**
- * Covers the backup unlock mechanism by showing the contents of the view initialized in
- * {@link BiometricSensorUnlock#initializeView(View)}. The view should disappear after the
- * specified timeout. If the timeout is 0, the interface shows until another event, such as
- * calling {@link BiometricSensorUnlock#hide()}, causes it to disappear. Called on the UI
- * thread.
- * @param timeoutMilliseconds Amount of time in milliseconds to display the view before
- * disappearing. A value of 0 means the view should remain visible.
- */
- public void show(long timeoutMilliseconds);
-
- /**
- * Uncovers the backup unlock mechanism by hiding the contents of the view initialized in
- * {@link BiometricSensorUnlock#initializeView(View)}.
- */
- public void hide();
-
- /**
- * Binds to the biometric unlock service and starts the unlock procedure. Called on the UI
- * thread.
- * @return false if it can't be started or the backup should be used.
- */
- public boolean start();
-
- /**
- * Stops the biometric unlock procedure and unbinds from the service. Called on the UI thread.
- * @return whether the biometric unlock was running when called.
- */
- public boolean stop();
-
- /**
- * Cleans up any resources used by the biometric unlock.
- */
- public void cleanUp();
-
- /**
- * Gets the Device Policy Manager quality of the biometric unlock sensor
- * (e.g., PASSWORD_QUALITY_BIOMETRIC_WEAK).
- * @return biometric unlock sensor quality, as defined by Device Policy Manager.
- */
- public int getQuality();
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/FaceUnlock.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/FaceUnlock.java
deleted file mode 100644
index e4768e2..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/FaceUnlock.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-import com.android.internal.policy.IFaceLockCallback;
-import com.android.internal.policy.IFaceLockInterface;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-import android.view.View;
-
-public class FaceUnlock implements BiometricSensorUnlock, Handler.Callback {
-
- private static final boolean DEBUG = false;
- private static final String TAG = "FULLockscreen";
-
- private final Context mContext;
- private final LockPatternUtils mLockPatternUtils;
- private final KeyguardUpdateMonitor mUpdateMonitor;
-
- // TODO: is mServiceRunning needed or can we just use mIsRunning or check if mService is null?
- private boolean mServiceRunning = false;
- // TODO: now that the code has been restructure to do almost all operations from a handler, this
- // lock may no longer be necessary.
- private final Object mServiceRunningLock = new Object();
- private IFaceLockInterface mService;
- private boolean mBoundToService = false;
- private View mFaceUnlockView;
-
- private Handler mHandler;
- private final int MSG_SHOW_FACE_UNLOCK_VIEW = 0;
- private final int MSG_HIDE_FACE_UNLOCK_VIEW = 1;
- private final int MSG_SERVICE_CONNECTED = 2;
- private final int MSG_SERVICE_DISCONNECTED = 3;
- private final int MSG_UNLOCK = 4;
- private final int MSG_CANCEL = 5;
- private final int MSG_REPORT_FAILED_ATTEMPT = 6;
- //private final int MSG_EXPOSE_FALLBACK = 7;
- private final int MSG_POKE_WAKELOCK = 8;
-
- // TODO: This was added for the purpose of adhering to what the biometric interface expects
- // the isRunning() function to return. However, it is probably not necessary to have both
- // mRunning and mServiceRunning. I'd just rather wait to change that logic.
- private volatile boolean mIsRunning = false;
-
- // Long enough to stay visible while the service starts
- // Short enough to not have to wait long for backup if service fails to start or crashes
- // The service can take a couple of seconds to start on the first try after boot
- private final int SERVICE_STARTUP_VIEW_TIMEOUT = 3000;
-
- // So the user has a consistent amount of time when brought to the backup method from Face
- // Unlock
- private final int BACKUP_LOCK_TIMEOUT = 5000;
-
- KeyguardScreenCallback mKeyguardScreenCallback;
-
- /**
- * Stores some of the structures that Face Unlock will need to access and creates the handler
- * will be used to execute messages on the UI thread.
- */
- public FaceUnlock(Context context, KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardScreenCallback keyguardScreenCallback) {
- mContext = context;
- mUpdateMonitor = updateMonitor;
- mLockPatternUtils = lockPatternUtils;
- mKeyguardScreenCallback = keyguardScreenCallback;
- mHandler = new Handler(this);
- }
-
- /**
- * Stores and displays the view that Face Unlock is allowed to draw within.
- * TODO: since the layout object will eventually be shared by multiple biometric unlock
- * methods, we will have to add our other views (background, cancel button) here.
- */
- public void initializeView(View biometricUnlockView) {
- Log.d(TAG, "initializeView()");
- mFaceUnlockView = biometricUnlockView;
- }
-
- /**
- * Indicates whether Face Unlock is currently running.
- */
- public boolean isRunning() {
- return mIsRunning;
- }
-
- /**
- * Sets the Face Unlock view to visible, hiding it after the specified amount of time. If
- * timeoutMillis is 0, no hide is performed. Called on the UI thread.
- */
- public void show(long timeoutMillis) {
- if (DEBUG) Log.d(TAG, "show()");
- if (mHandler.getLooper() != Looper.myLooper()) {
- Log.e(TAG, "show() called off of the UI thread");
- }
-
- removeDisplayMessages();
- if (mFaceUnlockView != null) {
- mFaceUnlockView.setVisibility(View.VISIBLE);
- }
- if (timeoutMillis > 0) {
- mHandler.sendEmptyMessageDelayed(MSG_HIDE_FACE_UNLOCK_VIEW, timeoutMillis);
- }
- }
-
- /**
- * Hides the Face Unlock view.
- */
- public void hide() {
- if (DEBUG) Log.d(TAG, "hide()");
- // Remove messages to prevent a delayed show message from undo-ing the hide
- removeDisplayMessages();
- mHandler.sendEmptyMessage(MSG_HIDE_FACE_UNLOCK_VIEW);
- }
-
- /**
- * Binds to the Face Unlock service. Face Unlock will be started when the bind completes. The
- * Face Unlock view is displayed to hide the backup lock while the service is starting up.
- * Called on the UI thread.
- */
- public boolean start() {
- if (DEBUG) Log.d(TAG, "start()");
- if (mHandler.getLooper() != Looper.myLooper()) {
- Log.e(TAG, "start() called off of the UI thread");
- }
-
- if (mIsRunning) {
- Log.w(TAG, "start() called when already running");
- }
-
- // Show Face Unlock view, but only for a little bit so lockpattern will become visible if
- // Face Unlock fails to start or crashes
- // This must show before bind to guarantee that Face Unlock has a place to display
- show(SERVICE_STARTUP_VIEW_TIMEOUT);
- if (!mBoundToService) {
- Log.d(TAG, "Binding to Face Unlock service");
- mContext.bindService(new Intent(IFaceLockInterface.class.getName()),
- mConnection,
- Context.BIND_AUTO_CREATE,
- mLockPatternUtils.getCurrentUser());
- mBoundToService = true;
- } else {
- Log.w(TAG, "Attempt to bind to Face Unlock when already bound");
- }
-
- mIsRunning = true;
- return true;
- }
-
- /**
- * Stops Face Unlock and unbinds from the service. Called on the UI thread.
- */
- public boolean stop() {
- if (DEBUG) Log.d(TAG, "stop()");
- if (mHandler.getLooper() != Looper.myLooper()) {
- Log.e(TAG, "stop() called off of the UI thread");
- }
-
- boolean mWasRunning = mIsRunning;
- stopUi();
-
- if (mBoundToService) {
- if (mService != null) {
- try {
- mService.unregisterCallback(mFaceUnlockCallback);
- } catch (RemoteException e) {
- // Not much we can do
- }
- }
- Log.d(TAG, "Unbinding from Face Unlock service");
- mContext.unbindService(mConnection);
- mBoundToService = false;
- } else {
- // This is usually not an error when this happens. Sometimes we will tell it to
- // unbind multiple times because it's called from both onWindowFocusChanged and
- // onDetachedFromWindow.
- if (DEBUG) Log.d(TAG, "Attempt to unbind from Face Unlock when not bound");
- }
- mIsRunning = false;
- return mWasRunning;
- }
-
- /**
- * Frees up resources used by Face Unlock and stops it if it is still running.
- */
- public void cleanUp() {
- if (DEBUG) Log.d(TAG, "cleanUp()");
- if (mService != null) {
- try {
- mService.unregisterCallback(mFaceUnlockCallback);
- } catch (RemoteException e) {
- // Not much we can do
- }
- stopUi();
- mService = null;
- }
- }
-
- /**
- * Returns the Device Policy Manager quality for Face Unlock, which is BIOMETRIC_WEAK.
- */
- public int getQuality() {
- return DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
- }
-
- /**
- * Handles messages such that everything happens on the UI thread in a deterministic order.
- * Calls from the Face Unlock service come from binder threads. Calls from lockscreen typically
- * come from the UI thread. This makes sure there are no race conditions between those calls.
- */
- @Override
- public boolean handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_SHOW_FACE_UNLOCK_VIEW:
- handleShowFaceUnlockView();
- break;
- case MSG_HIDE_FACE_UNLOCK_VIEW:
- handleHideFaceUnlockView();
- break;
- case MSG_SERVICE_CONNECTED:
- handleServiceConnected();
- break;
- case MSG_SERVICE_DISCONNECTED:
- handleServiceDisconnected();
- break;
- case MSG_UNLOCK:
- handleUnlock();
- break;
- case MSG_CANCEL:
- handleCancel();
- break;
- case MSG_REPORT_FAILED_ATTEMPT:
- handleReportFailedAttempt();
- break;
- //case MSG_EXPOSE_FALLBACK:
- //handleExposeFallback();
- //break;
- case MSG_POKE_WAKELOCK:
- handlePokeWakelock(msg.arg1);
- break;
- default:
- Log.e(TAG, "Unhandled message");
- return false;
- }
- return true;
- }
-
- /**
- * Sets the Face Unlock view to visible, thus covering the backup lock.
- */
- void handleShowFaceUnlockView() {
- if (DEBUG) Log.d(TAG, "handleShowFaceUnlockView()");
- if (mFaceUnlockView != null) {
- mFaceUnlockView.setVisibility(View.VISIBLE);
- } else {
- Log.e(TAG, "mFaceUnlockView is null in handleShowFaceUnlockView()");
- }
- }
-
- /**
- * Sets the Face Unlock view to invisible, thus exposing the backup lock.
- */
- void handleHideFaceUnlockView() {
- if (DEBUG) Log.d(TAG, "handleHideFaceUnlockView()");
- if (mFaceUnlockView != null) {
- mFaceUnlockView.setVisibility(View.INVISIBLE);
- } else {
- Log.e(TAG, "mFaceUnlockView is null in handleHideFaceUnlockView()");
- }
- }
-
- /**
- * Tells the service to start its UI via an AIDL interface. Called when the
- * onServiceConnected() callback is received.
- */
- void handleServiceConnected() {
- Log.d(TAG, "handleServiceConnected()");
-
- // It is possible that an unbind has occurred in the time between the bind and when this
- // function is reached. If an unbind has already occurred, proceeding on to call startUi()
- // can result in a fatal error. Note that the onServiceConnected() callback is
- // asynchronous, so this possibility would still exist if we executed this directly in
- // onServiceConnected() rather than using a handler.
- if (!mBoundToService) {
- Log.d(TAG, "Dropping startUi() in handleServiceConnected() because no longer bound");
- return;
- }
-
- try {
- mService.registerCallback(mFaceUnlockCallback);
- } catch (RemoteException e) {
- Log.e(TAG, "Caught exception connecting to Face Unlock: " + e.toString());
- mService = null;
- mBoundToService = false;
- mIsRunning = false;
- return;
- }
-
- if (mFaceUnlockView != null) {
- IBinder windowToken = mFaceUnlockView.getWindowToken();
- if (windowToken != null) {
- // When switching between portrait and landscape view while Face Unlock is running,
- // the screen will eventually go dark unless we poke the wakelock when Face Unlock
- // is restarted.
- mKeyguardScreenCallback.pokeWakelock();
-
- int[] position;
- position = new int[2];
- mFaceUnlockView.getLocationInWindow(position);
- startUi(windowToken, position[0], position[1], mFaceUnlockView.getWidth(),
- mFaceUnlockView.getHeight());
- } else {
- Log.e(TAG, "windowToken is null in handleServiceConnected()");
- }
- }
- }
-
- /**
- * Called when the onServiceDisconnected() callback is received. This should not happen during
- * normal operation. It indicates an error has occurred.
- */
- void handleServiceDisconnected() {
- Log.e(TAG, "handleServiceDisconnected()");
- // TODO: this lock may no longer be needed now that everything is being called from a
- // handler
- synchronized (mServiceRunningLock) {
- mService = null;
- mServiceRunning = false;
- }
- mBoundToService = false;
- mIsRunning = false;
- }
-
- /**
- * Stops the Face Unlock service and tells the device to grant access to the user. Shows the
- * Face Unlock view to keep the backup lock covered while the device unlocks.
- */
- void handleUnlock() {
- if (DEBUG) Log.d(TAG, "handleUnlock()");
- removeDisplayMessages();
- if (mFaceUnlockView != null) {
- mFaceUnlockView.setVisibility(View.VISIBLE);
- } else {
- Log.e(TAG, "mFaceUnlockView is null in handleUnlock()");
- }
- stop();
- mKeyguardScreenCallback.keyguardDone(true);
- mKeyguardScreenCallback.reportSuccessfulUnlockAttempt();
- }
-
- /**
- * Stops the Face Unlock service and exposes the backup lock.
- */
- void handleCancel() {
- if (DEBUG) Log.d(TAG, "handleCancel()");
- if (mFaceUnlockView != null) {
- mFaceUnlockView.setVisibility(View.INVISIBLE);
- } else {
- Log.e(TAG, "mFaceUnlockView is null in handleCancel()");
- }
- stop();
- mKeyguardScreenCallback.pokeWakelock(BACKUP_LOCK_TIMEOUT);
- }
-
- /**
- * Increments the number of failed Face Unlock attempts.
- */
- void handleReportFailedAttempt() {
- if (DEBUG) Log.d(TAG, "handleReportFailedAttempt()");
- mUpdateMonitor.reportFailedBiometricUnlockAttempt();
- }
-
- /**
- * Hides the Face Unlock view to expose the backup lock. Called when the Face Unlock service UI
- * is started, indicating there is no need to continue displaying the underlying view because
- * the service UI is now covering the backup lock.
- */
- //void handleExposeFallback() {
- // if (DEBUG) Log.d(TAG, "handleExposeFallback()");
- // if (mFaceUnlockView != null) {
- // mFaceUnlockView.setVisibility(View.INVISIBLE);
- // } else {
- // Log.e(TAG, "mFaceUnlockView is null in handleExposeFallback()");
- // }
- //}
-
- /**
- * Pokes the wakelock to keep the screen alive and active for a specific amount of time.
- */
- void handlePokeWakelock(int millis) {
- mKeyguardScreenCallback.pokeWakelock(millis);
- }
-
- /**
- * Removes show and hide messages from the message queue. Called to prevent delayed show/hide
- * messages from undoing a new message.
- */
- private void removeDisplayMessages() {
- mHandler.removeMessages(MSG_SHOW_FACE_UNLOCK_VIEW);
- mHandler.removeMessages(MSG_HIDE_FACE_UNLOCK_VIEW);
- }
-
- /**
- * Implements service connection methods.
- */
- private ServiceConnection mConnection = new ServiceConnection() {
- /**
- * Called when the Face Unlock service connects after calling bind().
- */
- @Override
- public void onServiceConnected(ComponentName className, IBinder iservice) {
- Log.d(TAG, "Connected to Face Unlock service");
- mService = IFaceLockInterface.Stub.asInterface(iservice);
- mHandler.sendEmptyMessage(MSG_SERVICE_CONNECTED);
- }
-
- /**
- * Called if the Face Unlock service unexpectedly disconnects. This indicates an error.
- */
- @Override
- public void onServiceDisconnected(ComponentName className) {
- Log.e(TAG, "Unexpected disconnect from Face Unlock service");
- mHandler.sendEmptyMessage(MSG_SERVICE_DISCONNECTED);
- }
- };
-
- /**
- * Tells the Face Unlock service to start displaying its UI and start processing.
- */
- private void startUi(IBinder windowToken, int x, int y, int w, int h) {
- if (DEBUG) Log.d(TAG, "startUi()");
- synchronized (mServiceRunningLock) {
- if (!mServiceRunning) {
- Log.d(TAG, "Starting Face Unlock");
- try {
- mService.startUi(windowToken, x, y, w, h,
- mLockPatternUtils.isBiometricWeakLivelinessEnabled());
- } catch (RemoteException e) {
- Log.e(TAG, "Caught exception starting Face Unlock: " + e.toString());
- return;
- }
- mServiceRunning = true;
- } else {
- Log.w(TAG, "startUi() attempted while running");
- }
- }
- }
-
- /**
- * Tells the Face Unlock service to stop displaying its UI and stop processing.
- */
- private void stopUi() {
- if (DEBUG) Log.d(TAG, "stopUi()");
- // Note that attempting to stop Face Unlock when it's not running is not an issue.
- // Face Unlock can return, which stops it and then we try to stop it when the
- // screen is turned off. That's why we check.
- synchronized (mServiceRunningLock) {
- if (mServiceRunning) {
- Log.d(TAG, "Stopping Face Unlock");
- try {
- mService.stopUi();
- } catch (RemoteException e) {
- Log.e(TAG, "Caught exception stopping Face Unlock: " + e.toString());
- }
- mServiceRunning = false;
- } else {
- // This is usually not an error when this happens. Sometimes we will tell it to
- // stop multiple times because it's called from both onWindowFocusChanged and
- // onDetachedFromWindow.
- if (DEBUG) Log.d(TAG, "stopUi() attempted while not running");
- }
- }
- }
-
- /**
- * Implements the AIDL biometric unlock service callback interface.
- */
- private final IFaceLockCallback mFaceUnlockCallback = new IFaceLockCallback.Stub() {
- /**
- * Called when Face Unlock wants to grant access to the user.
- */
- @Override
- public void unlock() {
- if (DEBUG) Log.d(TAG, "unlock()");
- mHandler.sendEmptyMessage(MSG_UNLOCK);
- }
-
- /**
- * Called when Face Unlock wants to go to the backup.
- */
- @Override
- public void cancel() {
- if (DEBUG) Log.d(TAG, "cancel()");
- mHandler.sendEmptyMessage(MSG_CANCEL);
- }
-
- /**
- * Called when Face Unlock wants to increment the number of failed attempts.
- */
- @Override
- public void reportFailedAttempt() {
- if (DEBUG) Log.d(TAG, "reportFailedAttempt()");
- mHandler.sendEmptyMessage(MSG_REPORT_FAILED_ATTEMPT);
- }
-
- /**
- * Called when the Face Unlock service starts displaying the UI, indicating that the backup
- * unlock can be exposed because the Face Unlock service is now covering the backup with its
- * UI.
- **/
- //@Override
- //public void exposeFallback() {
- // if (DEBUG) Log.d(TAG, "exposeFallback()");
- // mHandler.sendEmptyMessage(MSG_EXPOSE_FALLBACK);
- //}
-
- /**
- * Called when Face Unlock wants to keep the screen alive and active for a specific amount
- * of time.
- */
- public void pokeWakelock(int millis) {
- if (DEBUG) Log.d(TAG, "pokeWakelock() for " + millis + "ms");
- Message message = mHandler.obtainMessage(MSG_POKE_WAKELOCK, millis, -1);
- mHandler.sendMessage(message);
- }
-
- };
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreen.java
deleted file mode 100644
index ba5b7ff..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreen.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-/**
- * Common interface of each {@link android.view.View} that is a screen of
- * {@link LockPatternKeyguardView}.
- */
-public interface KeyguardScreen {
-
- /**
- * Return true if your view needs input, so should allow the soft
- * keyboard to be displayed.
- */
- boolean needsInput();
-
- /**
- * This screen is no longer in front of the user.
- */
- void onPause();
-
- /**
- * This screen is going to be in front of the user.
- */
- void onResume();
-
- /**
- * This view is going away; a hook to do cleanup.
- */
- void cleanUp();
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreenCallback.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreenCallback.java
deleted file mode 100644
index be505a1..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardScreenCallback.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.content.res.Configuration;
-
-/**
- * Within a keyguard, there may be several screens that need a callback
- * to the host keyguard view.
- */
-public interface KeyguardScreenCallback extends KeyguardViewCallback {
-
- /**
- * Transition to the lock screen.
- */
- void goToLockScreen();
-
- /**
- * Transition to the unlock screen.
- */
- void goToUnlockScreen();
-
- /**
- * The user reported that they forgot their pattern (or not, when they want to back out of the
- * forgot pattern screen).
- *
- * @param isForgotten True if the user hit the forgot pattern, false if they want to back out
- * of the account screen.
- */
- void forgotPattern(boolean isForgotten);
-
- /**
- * @return Whether the keyguard requires some sort of PIN.
- */
- boolean isSecure();
-
- /**
- * @return Whether we are in a mode where we only want to verify the
- * user can get past the keyguard.
- */
- boolean isVerifyUnlockOnly();
-
- /**
- * Stay on me, but recreate me (so I can use a different layout).
- */
- void recreateMe(Configuration config);
-
- /**
- * Take action to send an emergency call.
- */
- void takeEmergencyCallAction();
-
- /**
- * Report that the user had a failed attempt to unlock with password or pattern.
- */
- void reportFailedUnlockAttempt();
-
- /**
- * Report that the user successfully entered their password or pattern.
- */
- void reportSuccessfulUnlockAttempt();
-
- /**
- * Report whether we there's another way to unlock the device.
- * @return true
- */
- boolean doesFallbackUnlockScreenExist();
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardStatusViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardStatusViewManager.java
deleted file mode 100644
index b6ffde0..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardStatusViewManager.java
+++ /dev/null
@@ -1,682 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.widget.DigitalClock;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.TransportControlView;
-
-import java.util.ArrayList;
-import java.util.Date;
-
-import libcore.util.MutableInt;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.text.format.DateFormat;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.TextView;
-
-/***
- * Manages a number of views inside of LockScreen layouts. See below for a list of widgets
- *
- */
-class KeyguardStatusViewManager implements OnClickListener {
- private static final boolean DEBUG = false;
- private static final String TAG = "KeyguardStatusView";
-
- public static final int LOCK_ICON = 0; // R.drawable.ic_lock_idle_lock;
- public static final int ALARM_ICON = R.drawable.ic_lock_idle_alarm;
- public static final int CHARGING_ICON = 0; //R.drawable.ic_lock_idle_charging;
- public static final int BATTERY_LOW_ICON = 0; //R.drawable.ic_lock_idle_low_battery;
- private static final long INSTRUCTION_RESET_DELAY = 2000; // time until instruction text resets
-
- private static final int INSTRUCTION_TEXT = 10;
- private static final int CARRIER_TEXT = 11;
- private static final int CARRIER_HELP_TEXT = 12;
- private static final int HELP_MESSAGE_TEXT = 13;
- private static final int OWNER_INFO = 14;
- private static final int BATTERY_INFO = 15;
-
- private StatusMode mStatus;
- private String mDateFormatString;
- private TransientTextManager mTransientTextManager;
-
- // Views that this class controls.
- // NOTE: These may be null in some LockScreen screens and should protect from NPE
- private TextView mCarrierView;
- private TextView mDateView;
- private TextView mStatus1View;
- private TextView mOwnerInfoView;
- private TextView mAlarmStatusView;
- private TransportControlView mTransportView;
-
- // Top-level container view for above views
- private View mContainer;
-
- // are we showing battery information?
- private boolean mShowingBatteryInfo = false;
-
- // last known plugged in state
- private boolean mPluggedIn = false;
-
- // last known battery level
- private int mBatteryLevel = 100;
-
- // last known SIM state
- protected IccCardConstants.State mSimState;
-
- private LockPatternUtils mLockPatternUtils;
- private KeyguardUpdateMonitor mUpdateMonitor;
- private Button mEmergencyCallButton;
- private boolean mEmergencyButtonEnabledBecauseSimLocked;
-
- // Shadowed text values
- private CharSequence mCarrierText;
- private CharSequence mCarrierHelpText;
- private String mHelpMessageText;
- private String mInstructionText;
- private CharSequence mOwnerInfoText;
- private boolean mShowingStatus;
- private KeyguardScreenCallback mCallback;
- private final boolean mEmergencyCallButtonEnabledInScreen;
- private CharSequence mPlmn;
- private CharSequence mSpn;
- protected int mPhoneState;
- private DigitalClock mDigitalClock;
- protected boolean mBatteryCharged;
- protected boolean mBatteryIsLow;
-
- private class TransientTextManager {
- private TextView mTextView;
- private class Data {
- final int icon;
- final CharSequence text;
- Data(CharSequence t, int i) {
- text = t;
- icon = i;
- }
- };
- private ArrayList<Data> mMessages = new ArrayList<Data>(5);
-
- TransientTextManager(TextView textView) {
- mTextView = textView;
- }
-
- /* Show given message with icon for up to duration ms. Newer messages override older ones.
- * The most recent message with the longest duration is shown as messages expire until
- * nothing is left, in which case the text/icon is defined by a call to
- * getAltTextMessage() */
- void post(final CharSequence message, final int icon, long duration) {
- if (mTextView == null) {
- return;
- }
- mTextView.setText(message);
- mTextView.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0);
- final Data data = new Data(message, icon);
- mContainer.postDelayed(new Runnable() {
- public void run() {
- mMessages.remove(data);
- int last = mMessages.size() - 1;
- final CharSequence lastText;
- final int lastIcon;
- if (last > 0) {
- final Data oldData = mMessages.get(last);
- lastText = oldData.text;
- lastIcon = oldData.icon;
- } else {
- final MutableInt tmpIcon = new MutableInt(0);
- lastText = getAltTextMessage(tmpIcon);
- lastIcon = tmpIcon.value;
- }
- mTextView.setText(lastText);
- mTextView.setCompoundDrawablesWithIntrinsicBounds(lastIcon, 0, 0, 0);
- }
- }, duration);
- }
- };
-
- /**
- *
- * @param view the containing view of all widgets
- * @param updateMonitor the update monitor to use
- * @param lockPatternUtils lock pattern util object
- * @param callback used to invoke emergency dialer
- * @param emergencyButtonEnabledInScreen whether emergency button is enabled by default
- */
- public KeyguardStatusViewManager(View view, KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardScreenCallback callback,
- boolean emergencyButtonEnabledInScreen) {
- if (DEBUG) Log.v(TAG, "KeyguardStatusViewManager()");
- mContainer = view;
- mDateFormatString = getContext().getString(R.string.abbrev_wday_month_day_no_year);
- mLockPatternUtils = lockPatternUtils;
- mUpdateMonitor = updateMonitor;
- mCallback = callback;
-
- mCarrierView = (TextView) findViewById(R.id.carrier);
- mDateView = (TextView) findViewById(R.id.date);
- mStatus1View = (TextView) findViewById(R.id.status1);
- mAlarmStatusView = (TextView) findViewById(R.id.alarm_status);
- mOwnerInfoView = (TextView) findViewById(R.id.owner_info);
- mTransportView = (TransportControlView) findViewById(R.id.transport);
- mEmergencyCallButton = (Button) findViewById(R.id.emergencyCallButton);
- mEmergencyCallButtonEnabledInScreen = emergencyButtonEnabledInScreen;
- mDigitalClock = (DigitalClock) findViewById(R.id.time);
-
- // Hide transport control view until we know we need to show it.
- if (mTransportView != null) {
- mTransportView.setVisibility(View.GONE);
- }
-
- if (mEmergencyCallButton != null) {
- mEmergencyCallButton.setText(R.string.lockscreen_emergency_call);
- mEmergencyCallButton.setOnClickListener(this);
- mEmergencyCallButton.setFocusable(false); // touch only!
- }
-
- mTransientTextManager = new TransientTextManager(mCarrierView);
-
- // Registering this callback immediately updates the battery state, among other things.
- mUpdateMonitor.registerCallback(mInfoCallback);
-
- resetStatusInfo();
- refreshDate();
- updateOwnerInfo();
-
- // Required to get Marquee to work.
- final View scrollableViews[] = { mCarrierView, mDateView, mStatus1View, mOwnerInfoView,
- mAlarmStatusView };
- for (View v : scrollableViews) {
- if (v != null) {
- v.setSelected(true);
- }
- }
- }
-
- private boolean inWidgetMode() {
- return mTransportView != null && mTransportView.getVisibility() == View.VISIBLE;
- }
-
- void setInstructionText(String string) {
- mInstructionText = string;
- update(INSTRUCTION_TEXT, string);
- }
-
- void setCarrierText(CharSequence string) {
- mCarrierText = string;
- update(CARRIER_TEXT, string);
- }
-
- void setOwnerInfo(CharSequence string) {
- mOwnerInfoText = string;
- update(OWNER_INFO, string);
- }
-
- /**
- * Sets the carrier help text message, if view is present. Carrier help text messages are
- * typically for help dealing with SIMS and connectivity.
- *
- * @param resId resource id of the message
- */
- public void setCarrierHelpText(int resId) {
- mCarrierHelpText = getText(resId);
- update(CARRIER_HELP_TEXT, mCarrierHelpText);
- }
-
- private CharSequence getText(int resId) {
- return resId == 0 ? null : getContext().getText(resId);
- }
-
- /**
- * Unlock help message. This is typically for help with unlock widgets, e.g. "wrong password"
- * or "try again."
- *
- * @param textResId
- * @param lockIcon
- */
- public void setHelpMessage(int textResId, int lockIcon) {
- final CharSequence tmp = getText(textResId);
- mHelpMessageText = tmp == null ? null : tmp.toString();
- update(HELP_MESSAGE_TEXT, mHelpMessageText);
- }
-
- private void update(int what, CharSequence string) {
- if (inWidgetMode()) {
- if (DEBUG) Log.v(TAG, "inWidgetMode() is true");
- // Use Transient text for messages shown while widget is shown.
- switch (what) {
- case INSTRUCTION_TEXT:
- case CARRIER_HELP_TEXT:
- case HELP_MESSAGE_TEXT:
- case BATTERY_INFO:
- mTransientTextManager.post(string, 0, INSTRUCTION_RESET_DELAY);
- break;
-
- case OWNER_INFO:
- case CARRIER_TEXT:
- default:
- if (DEBUG) Log.w(TAG, "Not showing message id " + what + ", str=" + string);
- }
- } else {
- updateStatusLines(mShowingStatus);
- }
- }
-
- public void onPause() {
- if (DEBUG) Log.v(TAG, "onPause()");
- mUpdateMonitor.removeCallback(mInfoCallback);
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- if (DEBUG) Log.v(TAG, "onResume()");
-
- // First update the clock, if present.
- if (mDigitalClock != null) {
- mDigitalClock.updateTime();
- }
-
- mUpdateMonitor.registerCallback(mInfoCallback);
- resetStatusInfo();
- // Issue the biometric unlock failure message in a centralized place
- // TODO: we either need to make the Face Unlock multiple failures string a more general
- // 'biometric unlock' or have each biometric unlock handle this on their own.
- if (mUpdateMonitor.getMaxBiometricUnlockAttemptsReached()) {
- setInstructionText(getContext().getString(R.string.faceunlock_multiple_failures));
- }
- }
-
- void resetStatusInfo() {
- mInstructionText = null;
- updateStatusLines(true);
- }
-
- /**
- * Update the status lines based on these rules:
- * AlarmStatus: Alarm state always gets it's own line.
- * Status1 is shared between help, battery status and generic unlock instructions,
- * prioritized in that order.
- * @param showStatusLines status lines are shown if true
- */
- void updateStatusLines(boolean showStatusLines) {
- if (DEBUG) Log.v(TAG, "updateStatusLines(" + showStatusLines + ")");
- mShowingStatus = showStatusLines;
- updateAlarmInfo();
- updateOwnerInfo();
- updateStatus1();
- updateCarrierText();
- }
-
- private void updateAlarmInfo() {
- if (mAlarmStatusView != null) {
- String nextAlarm = mLockPatternUtils.getNextAlarm();
- boolean showAlarm = mShowingStatus && !TextUtils.isEmpty(nextAlarm);
- mAlarmStatusView.setText(nextAlarm);
- mAlarmStatusView.setCompoundDrawablesWithIntrinsicBounds(ALARM_ICON, 0, 0, 0);
- mAlarmStatusView.setVisibility(showAlarm ? View.VISIBLE : View.GONE);
- }
- }
-
- private void updateOwnerInfo() {
- final ContentResolver res = getContext().getContentResolver();
- final boolean ownerInfoEnabled = Settings.Secure.getInt(res,
- Settings.Secure.LOCK_SCREEN_OWNER_INFO_ENABLED, 1) != 0;
- mOwnerInfoText = ownerInfoEnabled ?
- Settings.Secure.getString(res, Settings.Secure.LOCK_SCREEN_OWNER_INFO) : null;
- if (mOwnerInfoView != null) {
- mOwnerInfoView.setText(mOwnerInfoText);
- mOwnerInfoView.setVisibility(TextUtils.isEmpty(mOwnerInfoText) ? View.GONE:View.VISIBLE);
- }
- }
-
- private void updateStatus1() {
- if (mStatus1View != null) {
- MutableInt icon = new MutableInt(0);
- CharSequence string = getPriorityTextMessage(icon);
- mStatus1View.setText(string);
- mStatus1View.setCompoundDrawablesWithIntrinsicBounds(icon.value, 0, 0, 0);
- mStatus1View.setVisibility(mShowingStatus ? View.VISIBLE : View.INVISIBLE);
- }
- }
-
- private void updateCarrierText() {
- if (!inWidgetMode() && mCarrierView != null) {
- mCarrierView.setText(mCarrierText);
- }
- }
-
- private CharSequence getAltTextMessage(MutableInt icon) {
- // If we have replaced the status area with a single widget, then this code
- // prioritizes what to show in that space when all transient messages are gone.
- CharSequence string = null;
- if (mShowingBatteryInfo) {
- // Battery status
- if (mPluggedIn) {
- // Charging, charged or waiting to charge.
- string = getContext().getString(mBatteryCharged ? R.string.lockscreen_charged
- :R.string.lockscreen_plugged_in, mBatteryLevel);
- icon.value = CHARGING_ICON;
- } else if (mBatteryIsLow) {
- // Battery is low
- string = getContext().getString(R.string.lockscreen_low_battery);
- icon.value = BATTERY_LOW_ICON;
- }
- } else {
- string = mCarrierText;
- }
- return string;
- }
-
- private CharSequence getPriorityTextMessage(MutableInt icon) {
- CharSequence string = null;
- if (!TextUtils.isEmpty(mInstructionText)) {
- // Instructions only
- string = mInstructionText;
- icon.value = LOCK_ICON;
- } else if (mShowingBatteryInfo) {
- // Battery status
- if (mPluggedIn) {
- // Charging, charged or waiting to charge.
- string = getContext().getString(mBatteryCharged ? R.string.lockscreen_charged
- :R.string.lockscreen_plugged_in, mBatteryLevel);
- icon.value = CHARGING_ICON;
- } else if (mBatteryIsLow) {
- // Battery is low
- string = getContext().getString(R.string.lockscreen_low_battery);
- icon.value = BATTERY_LOW_ICON;
- }
- } else if (!inWidgetMode() && mOwnerInfoView == null && mOwnerInfoText != null) {
- // OwnerInfo shows in status if we don't have a dedicated widget
- string = mOwnerInfoText;
- }
- return string;
- }
-
- void refreshDate() {
- if (mDateView != null) {
- mDateView.setText(DateFormat.format(mDateFormatString, new Date()));
- }
- }
-
- /**
- * Determine the current status of the lock screen given the sim state and other stuff.
- */
- public StatusMode getStatusForIccState(IccCardConstants.State simState) {
- // Since reading the SIM may take a while, we assume it is present until told otherwise.
- if (simState == null) {
- return StatusMode.Normal;
- }
-
- final boolean missingAndNotProvisioned = (!mUpdateMonitor.isDeviceProvisioned()
- && (simState == IccCardConstants.State.ABSENT ||
- simState == IccCardConstants.State.PERM_DISABLED));
-
- // Assume we're NETWORK_LOCKED if not provisioned
- simState = missingAndNotProvisioned ? IccCardConstants.State.NETWORK_LOCKED : simState;
- switch (simState) {
- case ABSENT:
- return StatusMode.SimMissing;
- case NETWORK_LOCKED:
- return StatusMode.SimMissingLocked;
- case NOT_READY:
- return StatusMode.SimMissing;
- case PIN_REQUIRED:
- return StatusMode.SimLocked;
- case PUK_REQUIRED:
- return StatusMode.SimPukLocked;
- case READY:
- return StatusMode.Normal;
- case PERM_DISABLED:
- return StatusMode.SimPermDisabled;
- case UNKNOWN:
- return StatusMode.SimMissing;
- }
- return StatusMode.SimMissing;
- }
-
- private Context getContext() {
- return mContainer.getContext();
- }
-
- /**
- * Update carrier text, carrier help and emergency button to match the current status based
- * on SIM state.
- *
- * @param simState
- */
- private void updateCarrierStateWithSimStatus(IccCardConstants.State simState) {
- if (DEBUG) Log.d(TAG, "updateCarrierTextWithSimStatus(), simState = " + simState);
-
- CharSequence carrierText = null;
- int carrierHelpTextId = 0;
- mEmergencyButtonEnabledBecauseSimLocked = false;
- mStatus = getStatusForIccState(simState);
- mSimState = simState;
- switch (mStatus) {
- case Normal:
- carrierText = makeCarierString(mPlmn, mSpn);
- break;
-
- case NetworkLocked:
- carrierText = makeCarrierStringOnEmergencyCapable(
- getContext().getText(R.string.lockscreen_network_locked_message),
- mPlmn);
- carrierHelpTextId = R.string.lockscreen_instructions_when_pattern_disabled;
- break;
-
- case SimMissing:
- // Shows "No SIM card | Emergency calls only" on devices that are voice-capable.
- // This depends on mPlmn containing the text "Emergency calls only" when the radio
- // has some connectivity. Otherwise, it should be null or empty and just show
- // "No SIM card"
- carrierText = makeCarrierStringOnEmergencyCapable(
- getContext().getText(R.string.lockscreen_missing_sim_message_short),
- mPlmn);
- carrierHelpTextId = R.string.lockscreen_missing_sim_instructions_long;
- break;
-
- case SimPermDisabled:
- carrierText = getContext().getText(
- R.string.lockscreen_permanent_disabled_sim_message_short);
- carrierHelpTextId = R.string.lockscreen_permanent_disabled_sim_instructions;
- mEmergencyButtonEnabledBecauseSimLocked = true;
- break;
-
- case SimMissingLocked:
- carrierText = makeCarrierStringOnEmergencyCapable(
- getContext().getText(R.string.lockscreen_missing_sim_message_short),
- mPlmn);
- carrierHelpTextId = R.string.lockscreen_missing_sim_instructions;
- mEmergencyButtonEnabledBecauseSimLocked = true;
- break;
-
- case SimLocked:
- carrierText = makeCarrierStringOnEmergencyCapable(
- getContext().getText(R.string.lockscreen_sim_locked_message),
- mPlmn);
- mEmergencyButtonEnabledBecauseSimLocked = true;
- break;
-
- case SimPukLocked:
- carrierText = makeCarrierStringOnEmergencyCapable(
- getContext().getText(R.string.lockscreen_sim_puk_locked_message),
- mPlmn);
- if (!mLockPatternUtils.isPukUnlockScreenEnable()) {
- // This means we're showing the PUK unlock screen
- mEmergencyButtonEnabledBecauseSimLocked = true;
- }
- break;
- }
-
- setCarrierText(carrierText);
- setCarrierHelpText(carrierHelpTextId);
- updateEmergencyCallButtonState(mPhoneState);
- }
-
-
- /*
- * Add emergencyCallMessage to carrier string only if phone supports emergency calls.
- */
- private CharSequence makeCarrierStringOnEmergencyCapable(
- CharSequence simMessage, CharSequence emergencyCallMessage) {
- if (mLockPatternUtils.isEmergencyCallCapable()) {
- return makeCarierString(simMessage, emergencyCallMessage);
- }
- return simMessage;
- }
-
- private View findViewById(int id) {
- return mContainer.findViewById(id);
- }
-
- /**
- * The status of this lock screen. Primarily used for widgets on LockScreen.
- */
- enum StatusMode {
- /**
- * Normal case (sim card present, it's not locked)
- */
- Normal(true),
-
- /**
- * The sim card is 'network locked'.
- */
- NetworkLocked(true),
-
- /**
- * The sim card is missing.
- */
- SimMissing(false),
-
- /**
- * The sim card is missing, and this is the device isn't provisioned, so we don't let
- * them get past the screen.
- */
- SimMissingLocked(false),
-
- /**
- * The sim card is PUK locked, meaning they've entered the wrong sim unlock code too many
- * times.
- */
- SimPukLocked(false),
-
- /**
- * The sim card is locked.
- */
- SimLocked(true),
-
- /**
- * The sim card is permanently disabled due to puk unlock failure
- */
- SimPermDisabled(false);
-
- private final boolean mShowStatusLines;
-
- StatusMode(boolean mShowStatusLines) {
- this.mShowStatusLines = mShowStatusLines;
- }
-
- /**
- * @return Whether the status lines (battery level and / or next alarm) are shown while
- * in this state. Mostly dictated by whether this is room for them.
- */
- public boolean shouldShowStatusLines() {
- return mShowStatusLines;
- }
- }
-
- private void updateEmergencyCallButtonState(int phoneState) {
- if (mEmergencyCallButton != null) {
- boolean enabledBecauseSimLocked =
- mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked()
- && mEmergencyButtonEnabledBecauseSimLocked;
- boolean shown = mEmergencyCallButtonEnabledInScreen || enabledBecauseSimLocked;
- mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton,
- phoneState, shown);
- }
- }
-
- private KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
-
- public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {
- mShowingBatteryInfo = status.isPluggedIn() || status.isBatteryLow();
- mPluggedIn = status.isPluggedIn();
- mBatteryLevel = status.level;
- mBatteryCharged = status.isCharged();
- mBatteryIsLow = status.isBatteryLow();
- final MutableInt tmpIcon = new MutableInt(0);
- update(BATTERY_INFO, getAltTextMessage(tmpIcon));
- }
-
- @Override
- public void onTimeChanged() {
- refreshDate();
- }
-
- @Override
- public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) {
- mPlmn = plmn;
- mSpn = spn;
- updateCarrierStateWithSimStatus(mSimState);
- }
-
- @Override
- public void onPhoneStateChanged(int phoneState) {
- mPhoneState = phoneState;
- updateEmergencyCallButtonState(phoneState);
- }
-
- @Override
- public void onSimStateChanged(IccCardConstants.State simState) {
- updateCarrierStateWithSimStatus(simState);
- }
- };
-
- public void onClick(View v) {
- if (v == mEmergencyCallButton) {
- mCallback.takeEmergencyCallAction();
- }
- }
-
- /**
- * Performs concentenation of PLMN/SPN
- * @param plmn
- * @param spn
- * @return
- */
- private static CharSequence makeCarierString(CharSequence plmn, CharSequence spn) {
- final boolean plmnValid = !TextUtils.isEmpty(plmn);
- final boolean spnValid = !TextUtils.isEmpty(spn);
- if (plmnValid && spnValid) {
- return plmn + "|" + spn;
- } else if (plmnValid) {
- return plmn;
- } else if (spnValid) {
- return spn;
- } else {
- return "";
- }
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitor.java
deleted file mode 100644
index 67dc8a7..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitor.java
+++ /dev/null
@@ -1,642 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import static android.os.BatteryManager.BATTERY_STATUS_FULL;
-import static android.os.BatteryManager.BATTERY_STATUS_UNKNOWN;
-import static android.os.BatteryManager.BATTERY_HEALTH_UNKNOWN;
-import static android.os.BatteryManager.EXTRA_STATUS;
-import static android.os.BatteryManager.EXTRA_PLUGGED;
-import static android.os.BatteryManager.EXTRA_LEVEL;
-import static android.os.BatteryManager.EXTRA_HEALTH;
-import android.media.AudioManager;
-import android.os.BatteryManager;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.Settings;
-
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.telephony.TelephonyIntents;
-
-import android.telephony.TelephonyManager;
-import android.util.Log;
-import com.android.internal.R;
-import com.google.android.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Watches for updates that may be interesting to the keyguard, and provides
- * the up to date information as well as a registration for callbacks that care
- * to be updated.
- *
- * Note: under time crunch, this has been extended to include some stuff that
- * doesn't really belong here. see {@link #handleBatteryUpdate} where it shutdowns
- * the device, and {@link #getFailedAttempts()}, {@link #reportFailedAttempt()}
- * and {@link #clearFailedAttempts()}. Maybe we should rename this 'KeyguardContext'...
- */
-public class KeyguardUpdateMonitor {
-
- private static final String TAG = "KeyguardUpdateMonitor";
- private static final boolean DEBUG = false;
- private static final boolean DEBUG_SIM_STATES = DEBUG || false;
- private static final int FAILED_BIOMETRIC_UNLOCK_ATTEMPTS_BEFORE_BACKUP = 3;
- private static final int LOW_BATTERY_THRESHOLD = 20;
-
- // Callback messages
- private static final int MSG_TIME_UPDATE = 301;
- private static final int MSG_BATTERY_UPDATE = 302;
- private static final int MSG_CARRIER_INFO_UPDATE = 303;
- private static final int MSG_SIM_STATE_CHANGE = 304;
- private static final int MSG_RINGER_MODE_CHANGED = 305;
- private static final int MSG_PHONE_STATE_CHANGED = 306;
- private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307;
- private static final int MSG_DEVICE_PROVISIONED = 308;
- protected static final int MSG_DPM_STATE_CHANGED = 309;
- protected static final int MSG_USER_SWITCHED = 310;
- protected static final int MSG_USER_REMOVED = 311;
-
- private final Context mContext;
-
- // Telephony state
- private IccCardConstants.State mSimState = IccCardConstants.State.READY;
- private CharSequence mTelephonyPlmn;
- private CharSequence mTelephonySpn;
- private int mRingMode;
- private int mPhoneState;
-
- private boolean mDeviceProvisioned;
-
- private BatteryStatus mBatteryStatus;
-
- private int mFailedAttempts = 0;
- private int mFailedBiometricUnlockAttempts = 0;
-
- private boolean mClockVisible;
-
- private ArrayList<KeyguardUpdateMonitorCallback> mCallbacks = Lists.newArrayList();
- private ContentObserver mContentObserver;
-
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_TIME_UPDATE:
- handleTimeUpdate();
- break;
- case MSG_BATTERY_UPDATE:
- handleBatteryUpdate((BatteryStatus) msg.obj);
- break;
- case MSG_CARRIER_INFO_UPDATE:
- handleCarrierInfoUpdate();
- break;
- case MSG_SIM_STATE_CHANGE:
- handleSimStateChange((SimArgs) msg.obj);
- break;
- case MSG_RINGER_MODE_CHANGED:
- handleRingerModeChange(msg.arg1);
- break;
- case MSG_PHONE_STATE_CHANGED:
- handlePhoneStateChanged((String)msg.obj);
- break;
- case MSG_CLOCK_VISIBILITY_CHANGED:
- handleClockVisibilityChanged();
- break;
- case MSG_DEVICE_PROVISIONED:
- handleDeviceProvisioned();
- break;
- case MSG_DPM_STATE_CHANGED:
- handleDevicePolicyManagerStateChanged();
- break;
- case MSG_USER_SWITCHED:
- handleUserSwitched(msg.arg1);
- break;
- case MSG_USER_REMOVED:
- handleUserRemoved(msg.arg1);
- break;
- }
- }
- };
-
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
-
- public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (DEBUG) Log.d(TAG, "received broadcast " + action);
-
- if (Intent.ACTION_TIME_TICK.equals(action)
- || Intent.ACTION_TIME_CHANGED.equals(action)
- || Intent.ACTION_TIMEZONE_CHANGED.equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_TIME_UPDATE));
- } else if (TelephonyIntents.SPN_STRINGS_UPDATED_ACTION.equals(action)) {
- mTelephonyPlmn = getTelephonyPlmnFrom(intent);
- mTelephonySpn = getTelephonySpnFrom(intent);
- mHandler.sendMessage(mHandler.obtainMessage(MSG_CARRIER_INFO_UPDATE));
- } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- final int status = intent.getIntExtra(EXTRA_STATUS, BATTERY_STATUS_UNKNOWN);
- final int plugged = intent.getIntExtra(EXTRA_PLUGGED, 0);
- final int level = intent.getIntExtra(EXTRA_LEVEL, 0);
- final int health = intent.getIntExtra(EXTRA_HEALTH, BATTERY_HEALTH_UNKNOWN);
- final Message msg = mHandler.obtainMessage(
- MSG_BATTERY_UPDATE, new BatteryStatus(status, level, plugged, health));
- mHandler.sendMessage(msg);
- } else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
- if (DEBUG_SIM_STATES) {
- Log.v(TAG, "action " + action + " state" +
- intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE));
- }
- mHandler.sendMessage(mHandler.obtainMessage(
- MSG_SIM_STATE_CHANGE, SimArgs.fromIntent(intent)));
- } else if (AudioManager.RINGER_MODE_CHANGED_ACTION.equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_RINGER_MODE_CHANGED,
- intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1), 0));
- } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) {
- String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
- mHandler.sendMessage(mHandler.obtainMessage(MSG_PHONE_STATE_CHANGED, state));
- } else if (DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED
- .equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_DPM_STATE_CHANGED));
- } else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_SWITCHED,
- intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
- } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_USER_REMOVED,
- intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0));
- }
- }
- };
-
- /**
- * When we receive a
- * {@link com.android.internal.telephony.TelephonyIntents#ACTION_SIM_STATE_CHANGED} broadcast,
- * and then pass a result via our handler to {@link KeyguardUpdateMonitor#handleSimStateChange},
- * we need a single object to pass to the handler. This class helps decode
- * the intent and provide a {@link SimCard.State} result.
- */
- private static class SimArgs {
- public final IccCardConstants.State simState;
-
- SimArgs(IccCardConstants.State state) {
- simState = state;
- }
-
- static SimArgs fromIntent(Intent intent) {
- IccCardConstants.State state;
- if (!TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {
- throw new IllegalArgumentException("only handles intent ACTION_SIM_STATE_CHANGED");
- }
- String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
- if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(stateExtra)) {
- final String absentReason = intent
- .getStringExtra(IccCardConstants.INTENT_KEY_LOCKED_REASON);
-
- if (IccCardConstants.INTENT_VALUE_ABSENT_ON_PERM_DISABLED.equals(
- absentReason)) {
- state = IccCardConstants.State.PERM_DISABLED;
- } else {
- state = IccCardConstants.State.ABSENT;
- }
- } else if (IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)) {
- state = IccCardConstants.State.READY;
- } else if (IccCardConstants.INTENT_VALUE_ICC_LOCKED.equals(stateExtra)) {
- final String lockedReason = intent
- .getStringExtra(IccCardConstants.INTENT_KEY_LOCKED_REASON);
- if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PIN.equals(lockedReason)) {
- state = IccCardConstants.State.PIN_REQUIRED;
- } else if (IccCardConstants.INTENT_VALUE_LOCKED_ON_PUK.equals(lockedReason)) {
- state = IccCardConstants.State.PUK_REQUIRED;
- } else {
- state = IccCardConstants.State.UNKNOWN;
- }
- } else if (IccCardConstants.INTENT_VALUE_LOCKED_NETWORK.equals(stateExtra)) {
- state = IccCardConstants.State.NETWORK_LOCKED;
- } else {
- state = IccCardConstants.State.UNKNOWN;
- }
- return new SimArgs(state);
- }
-
- public String toString() {
- return simState.toString();
- }
- }
-
- /* package */ static class BatteryStatus {
- public final int status;
- public final int level;
- public final int plugged;
- public final int health;
- public BatteryStatus(int status, int level, int plugged, int health) {
- this.status = status;
- this.level = level;
- this.plugged = plugged;
- this.health = health;
- }
-
- /**
- * Determine whether the device is plugged in (USB or power).
- * @return true if the device is plugged in.
- */
- boolean isPluggedIn() {
- return plugged == BatteryManager.BATTERY_PLUGGED_AC
- || plugged == BatteryManager.BATTERY_PLUGGED_USB
- || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS;
- }
-
- /**
- * Whether or not the device is charged. Note that some devices never return 100% for
- * battery level, so this allows either battery level or status to determine if the
- * battery is charged.
- * @return true if the device is charged
- */
- public boolean isCharged() {
- return status == BATTERY_STATUS_FULL || level >= 100;
- }
-
- /**
- * Whether battery is low and needs to be charged.
- * @return true if battery is low
- */
- public boolean isBatteryLow() {
- return level < LOW_BATTERY_THRESHOLD;
- }
-
- }
-
- public KeyguardUpdateMonitor(Context context) {
- mContext = context;
-
- mDeviceProvisioned = Settings.Global.getInt(
- mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-
- // Since device can't be un-provisioned, we only need to register a content observer
- // to update mDeviceProvisioned when we are...
- if (!mDeviceProvisioned) {
- watchForDeviceProvisioning();
- }
-
- // Take a guess at initial SIM state, battery status and PLMN until we get an update
- mSimState = IccCardConstants.State.NOT_READY;
- mBatteryStatus = new BatteryStatus(BATTERY_STATUS_UNKNOWN, 100, 0, 0);
- mTelephonyPlmn = getDefaultPlmn();
-
- // Watch for interesting updates
- final IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_TIME_TICK);
- filter.addAction(Intent.ACTION_TIME_CHANGED);
- filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
- filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
- filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
- filter.addAction(TelephonyIntents.SPN_STRINGS_UPDATED_ACTION);
- filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
- filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
- filter.addAction(Intent.ACTION_USER_SWITCHED);
- filter.addAction(Intent.ACTION_USER_REMOVED);
- context.registerReceiver(mBroadcastReceiver, filter);
- }
-
- private void watchForDeviceProvisioning() {
- mContentObserver = new ContentObserver(mHandler) {
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- mDeviceProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.DEVICE_PROVISIONED, 0) != 0;
- if (mDeviceProvisioned) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_DEVICE_PROVISIONED));
- }
- if (DEBUG) Log.d(TAG, "DEVICE_PROVISIONED state = " + mDeviceProvisioned);
- }
- };
-
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED),
- false, mContentObserver);
-
- // prevent a race condition between where we check the flag and where we register the
- // observer by grabbing the value once again...
- boolean provisioned = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.DEVICE_PROVISIONED, 0) != 0;
- if (provisioned != mDeviceProvisioned) {
- mDeviceProvisioned = provisioned;
- if (mDeviceProvisioned) {
- mHandler.sendMessage(mHandler.obtainMessage(MSG_DEVICE_PROVISIONED));
- }
- }
- }
-
- /**
- * Handle {@link #MSG_DPM_STATE_CHANGED}
- */
- protected void handleDevicePolicyManagerStateChanged() {
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onDevicePolicyManagerStateChanged();
- }
- }
-
- /**
- * Handle {@link #MSG_USER_SWITCHED}
- */
- protected void handleUserSwitched(int userId) {
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onUserSwitched(userId);
- }
- }
-
- /**
- * Handle {@link #MSG_USER_SWITCHED}
- */
- protected void handleUserRemoved(int userId) {
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onUserRemoved(userId);
- }
- }
-
- /**
- * Handle {@link #MSG_DEVICE_PROVISIONED}
- */
- protected void handleDeviceProvisioned() {
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onDeviceProvisioned();
- }
- if (mContentObserver != null) {
- // We don't need the observer anymore...
- mContext.getContentResolver().unregisterContentObserver(mContentObserver);
- mContentObserver = null;
- }
- }
-
- /**
- * Handle {@link #MSG_PHONE_STATE_CHANGED}
- */
- protected void handlePhoneStateChanged(String newState) {
- if (DEBUG) Log.d(TAG, "handlePhoneStateChanged(" + newState + ")");
- if (TelephonyManager.EXTRA_STATE_IDLE.equals(newState)) {
- mPhoneState = TelephonyManager.CALL_STATE_IDLE;
- } else if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(newState)) {
- mPhoneState = TelephonyManager.CALL_STATE_OFFHOOK;
- } else if (TelephonyManager.EXTRA_STATE_RINGING.equals(newState)) {
- mPhoneState = TelephonyManager.CALL_STATE_RINGING;
- }
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onPhoneStateChanged(mPhoneState);
- }
- }
-
- /**
- * Handle {@link #MSG_RINGER_MODE_CHANGED}
- */
- protected void handleRingerModeChange(int mode) {
- if (DEBUG) Log.d(TAG, "handleRingerModeChange(" + mode + ")");
- mRingMode = mode;
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onRingerModeChanged(mode);
- }
- }
-
- /**
- * Handle {@link #MSG_TIME_UPDATE}
- */
- private void handleTimeUpdate() {
- if (DEBUG) Log.d(TAG, "handleTimeUpdate");
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onTimeChanged();
- }
- }
-
- /**
- * Handle {@link #MSG_BATTERY_UPDATE}
- */
- private void handleBatteryUpdate(BatteryStatus status) {
- if (DEBUG) Log.d(TAG, "handleBatteryUpdate");
- final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status);
- mBatteryStatus = status;
- if (batteryUpdateInteresting) {
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onRefreshBatteryInfo(status);
- }
- }
- }
-
- /**
- * Handle {@link #MSG_CARRIER_INFO_UPDATE}
- */
- private void handleCarrierInfoUpdate() {
- if (DEBUG) Log.d(TAG, "handleCarrierInfoUpdate: plmn = " + mTelephonyPlmn
- + ", spn = " + mTelephonySpn);
-
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onRefreshCarrierInfo(mTelephonyPlmn, mTelephonySpn);
- }
- }
-
- /**
- * Handle {@link #MSG_SIM_STATE_CHANGE}
- */
- private void handleSimStateChange(SimArgs simArgs) {
- final IccCardConstants.State state = simArgs.simState;
-
- if (DEBUG) {
- Log.d(TAG, "handleSimStateChange: intentValue = " + simArgs + " "
- + "state resolved to " + state.toString());
- }
-
- if (state != IccCardConstants.State.UNKNOWN && state != mSimState) {
- mSimState = state;
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onSimStateChanged(state);
- }
- }
- }
-
- /**
- * Handle {@link #MSG_CLOCK_VISIBILITY_CHANGED}
- */
- private void handleClockVisibilityChanged() {
- if (DEBUG) Log.d(TAG, "handleClockVisibilityChanged()");
- for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).onClockVisibilityChanged();
- }
- }
-
- private static boolean isBatteryUpdateInteresting(BatteryStatus old, BatteryStatus current) {
- final boolean nowPluggedIn = current.isPluggedIn();
- final boolean wasPluggedIn = old.isPluggedIn();
- final boolean stateChangedWhilePluggedIn =
- wasPluggedIn == true && nowPluggedIn == true
- && (old.status != current.status);
-
- // change in plug state is always interesting
- if (wasPluggedIn != nowPluggedIn || stateChangedWhilePluggedIn) {
- return true;
- }
-
- // change in battery level while plugged in
- if (nowPluggedIn && old.level != current.level) {
- return true;
- }
-
- // change where battery needs charging
- if (!nowPluggedIn && current.isBatteryLow() && current.level != old.level) {
- return true;
- }
- return false;
- }
-
- /**
- * @param intent The intent with action {@link TelephonyIntents#SPN_STRINGS_UPDATED_ACTION}
- * @return The string to use for the plmn, or null if it should not be shown.
- */
- private CharSequence getTelephonyPlmnFrom(Intent intent) {
- if (intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_PLMN, false)) {
- final String plmn = intent.getStringExtra(TelephonyIntents.EXTRA_PLMN);
- return (plmn != null) ? plmn : getDefaultPlmn();
- }
- return null;
- }
-
- /**
- * @return The default plmn (no service)
- */
- private CharSequence getDefaultPlmn() {
- return mContext.getResources().getText(R.string.lockscreen_carrier_default);
- }
-
- /**
- * @param intent The intent with action {@link Telephony.Intents#SPN_STRINGS_UPDATED_ACTION}
- * @return The string to use for the plmn, or null if it should not be shown.
- */
- private CharSequence getTelephonySpnFrom(Intent intent) {
- if (intent.getBooleanExtra(TelephonyIntents.EXTRA_SHOW_SPN, false)) {
- final String spn = intent.getStringExtra(TelephonyIntents.EXTRA_SPN);
- if (spn != null) {
- return spn;
- }
- }
- return null;
- }
-
- /**
- * Remove the given observer's callback.
- *
- * @param observer The observer to remove
- */
- public void removeCallback(Object observer) {
- mCallbacks.remove(observer);
- }
-
- /**
- * Register to receive notifications about general keyguard information
- * (see {@link InfoCallback}.
- * @param callback The callback.
- */
- public void registerCallback(KeyguardUpdateMonitorCallback callback) {
- if (!mCallbacks.contains(callback)) {
- mCallbacks.add(callback);
- // Notify listener of the current state
- callback.onRefreshBatteryInfo(mBatteryStatus);
- callback.onTimeChanged();
- callback.onRingerModeChanged(mRingMode);
- callback.onPhoneStateChanged(mPhoneState);
- callback.onRefreshCarrierInfo(mTelephonyPlmn, mTelephonySpn);
- callback.onClockVisibilityChanged();
- callback.onSimStateChanged(mSimState);
- } else {
- if (DEBUG) Log.e(TAG, "Object tried to add another callback",
- new Exception("Called by"));
- }
- }
-
- public void reportClockVisible(boolean visible) {
- mClockVisible = visible;
- mHandler.obtainMessage(MSG_CLOCK_VISIBILITY_CHANGED).sendToTarget();
- }
-
- public IccCardConstants.State getSimState() {
- return mSimState;
- }
-
- /**
- * Report that the user successfully entered the SIM PIN or PUK/SIM PIN so we
- * have the information earlier than waiting for the intent
- * broadcast from the telephony code.
- *
- * NOTE: Because handleSimStateChange() invokes callbacks immediately without going
- * through mHandler, this *must* be called from the UI thread.
- */
- public void reportSimUnlocked() {
- handleSimStateChange(new SimArgs(IccCardConstants.State.READY));
- }
-
- public CharSequence getTelephonyPlmn() {
- return mTelephonyPlmn;
- }
-
- public CharSequence getTelephonySpn() {
- return mTelephonySpn;
- }
-
- /**
- * @return Whether the device is provisioned (whether they have gone through
- * the setup wizard)
- */
- public boolean isDeviceProvisioned() {
- return mDeviceProvisioned;
- }
-
- public int getFailedAttempts() {
- return mFailedAttempts;
- }
-
- public void clearFailedAttempts() {
- mFailedAttempts = 0;
- mFailedBiometricUnlockAttempts = 0;
- }
-
- public void reportFailedAttempt() {
- mFailedAttempts++;
- }
-
- public boolean isClockVisible() {
- return mClockVisible;
- }
-
- public int getPhoneState() {
- return mPhoneState;
- }
-
- public void reportFailedBiometricUnlockAttempt() {
- mFailedBiometricUnlockAttempts++;
- }
-
- public boolean getMaxBiometricUnlockAttemptsReached() {
- return mFailedBiometricUnlockAttempts >= FAILED_BIOMETRIC_UNLOCK_ATTEMPTS_BEFORE_BACKUP;
- }
-
- public boolean isSimLocked() {
- return mSimState == IccCardConstants.State.PIN_REQUIRED
- || mSimState == IccCardConstants.State.PUK_REQUIRED
- || mSimState == IccCardConstants.State.PERM_DISABLED;
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitorCallback.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitorCallback.java
deleted file mode 100644
index 79233e8..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardUpdateMonitorCallback.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.app.admin.DevicePolicyManager;
-import android.media.AudioManager;
-
-import com.android.internal.telephony.IccCardConstants;
-
-/**
- * Callback for general information relevant to lock screen.
- */
-class KeyguardUpdateMonitorCallback {
- /**
- * Called when the battery status changes, e.g. when plugged in or unplugged, charge
- * level, etc. changes.
- *
- * @param status current battery status
- */
- void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) { }
-
- /**
- * Called once per minute or when the time changes.
- */
- void onTimeChanged() { }
-
- /**
- * Called when the carrier PLMN or SPN changes.
- *
- * @param plmn The operator name of the registered network. May be null if it shouldn't
- * be displayed.
- * @param spn The service provider name. May be null if it shouldn't be displayed.
- */
- void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { }
-
- /**
- * Called when the ringer mode changes.
- * @param state the current ringer state, as defined in
- * {@link AudioManager#RINGER_MODE_CHANGED_ACTION}
- */
- void onRingerModeChanged(int state) { }
-
- /**
- * Called when the phone state changes. String will be one of:
- * {@link TelephonyManager#EXTRA_STATE_IDLE}
- * {@link TelephonyManager@EXTRA_STATE_RINGING}
- * {@link TelephonyManager#EXTRA_STATE_OFFHOOK
- */
- void onPhoneStateChanged(int phoneState) { }
-
- /**
- * Called when visibility of lockscreen clock changes, such as when
- * obscured by a widget.
- */
- void onClockVisibilityChanged() { }
-
- /**
- * Called when the device becomes provisioned
- */
- void onDeviceProvisioned() { }
-
- /**
- * Called when the device policy changes.
- * See {@link DevicePolicyManager#ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED}
- */
- void onDevicePolicyManagerStateChanged() { }
-
- /**
- * Called when the user changes.
- */
- void onUserSwitched(int userId) { }
-
- /**
- * Called when the SIM state changes.
- * @param simState
- */
- void onSimStateChanged(IccCardConstants.State simState) { }
-
- /**
- * Called when a user is removed.
- */
- void onUserRemoved(int userId) { }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewBase.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewBase.java
deleted file mode 100644
index f9fe797..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewBase.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.PixelFormat;
-import android.graphics.PorterDuff;
-import android.graphics.drawable.Drawable;
-import android.media.AudioManager;
-import android.media.IAudioService;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.telephony.TelephonyManager;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.Gravity;
-import android.widget.FrameLayout;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Slog;
-
-/**
- * Base class for keyguard views. {@link #reset} is where you should
- * reset the state of your view. Use the {@link KeyguardViewCallback} via
- * {@link #getCallback()} to send information back (such as poking the wake lock,
- * or finishing the keyguard).
- *
- * Handles intercepting of media keys that still work when the keyguard is
- * showing.
- */
-public abstract class KeyguardViewBase extends FrameLayout {
-
- private static final int BACKGROUND_COLOR = 0x70000000;
- private KeyguardViewCallback mCallback;
- private AudioManager mAudioManager;
- private TelephonyManager mTelephonyManager = null;
- // Whether the volume keys should be handled by keyguard. If true, then
- // they will be handled here for specific media types such as music, otherwise
- // the audio service will bring up the volume dialog.
- private static final boolean KEYGUARD_MANAGES_VOLUME = true;
-
- // This is a faster way to draw the background on devices without hardware acceleration
- Drawable mBackgroundDrawable = new Drawable() {
- @Override
- public void draw(Canvas canvas) {
- canvas.drawColor(BACKGROUND_COLOR, PorterDuff.Mode.SRC);
- }
-
- @Override
- public void setAlpha(int alpha) {
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- }
-
- @Override
- public int getOpacity() {
- return PixelFormat.TRANSLUCENT;
- }
- };
-
- public KeyguardViewBase(Context context, KeyguardViewCallback callback) {
- super(context);
- mCallback = callback;
- resetBackground();
- }
-
- public void resetBackground() {
- setBackgroundDrawable(mBackgroundDrawable);
- }
-
- public KeyguardViewCallback getCallback() {
- return mCallback;
- }
-
- /**
- * Called when you need to reset the state of your view.
- */
- abstract public void reset();
-
- /**
- * Called when the screen turned off.
- */
- abstract public void onScreenTurnedOff();
-
- /**
- * Called when the screen turned on.
- */
- abstract public void onScreenTurnedOn();
-
- /**
- * Called when the view needs to be shown.
- */
- abstract public void show();
-
- /**
- * Called when a key has woken the device to give us a chance to adjust our
- * state according the the key. We are responsible for waking the device
- * (by poking the wake lock) once we are ready.
- *
- * The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}.
- * Be sure not to take any action that takes a long time; any significant
- * action should be posted to a handler.
- *
- * @param keyCode The wake key, which may be relevant for configuring the
- * keyguard. May be {@link KeyEvent#KEYCODE_UNKNOWN} if waking for a reason
- * other than a key press.
- */
- abstract public void wakeWhenReadyTq(int keyCode);
-
- /**
- * Verify that the user can get past the keyguard securely. This is called,
- * for example, when the phone disables the keyguard but then wants to launch
- * something else that requires secure access.
- *
- * The result will be propogated back via {@link KeyguardViewCallback#keyguardDone(boolean)}
- */
- abstract public void verifyUnlock();
-
- /**
- * Called before this view is being removed.
- */
- abstract public void cleanUp();
-
- @Override
- public boolean dispatchKeyEvent(KeyEvent event) {
- if (shouldEventKeepScreenOnWhileKeyguardShowing(event)) {
- mCallback.pokeWakelock();
- }
-
- if (interceptMediaKey(event)) {
- return true;
- }
- return super.dispatchKeyEvent(event);
- }
-
- private boolean shouldEventKeepScreenOnWhileKeyguardShowing(KeyEvent event) {
- if (event.getAction() != KeyEvent.ACTION_DOWN) {
- return false;
- }
- switch (event.getKeyCode()) {
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- case KeyEvent.KEYCODE_DPAD_UP:
- return false;
- default:
- return true;
- }
- }
-
- /**
- * Allows the media keys to work when the keyguard is showing.
- * The media keys should be of no interest to the actual keyguard view(s),
- * so intercepting them here should not be of any harm.
- * @param event The key event
- * @return whether the event was consumed as a media key.
- */
- private boolean interceptMediaKey(KeyEvent event) {
- final int keyCode = event.getKeyCode();
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_MEDIA_PLAY:
- case KeyEvent.KEYCODE_MEDIA_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- /* Suppress PLAY/PAUSE toggle when phone is ringing or
- * in-call to avoid music playback */
- if (mTelephonyManager == null) {
- mTelephonyManager = (TelephonyManager) getContext().getSystemService(
- Context.TELEPHONY_SERVICE);
- }
- if (mTelephonyManager != null &&
- mTelephonyManager.getCallState() != TelephonyManager.CALL_STATE_IDLE) {
- return true; // suppress key event
- }
- case KeyEvent.KEYCODE_MUTE:
- case KeyEvent.KEYCODE_HEADSETHOOK:
- case KeyEvent.KEYCODE_MEDIA_STOP:
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- case KeyEvent.KEYCODE_MEDIA_REWIND:
- case KeyEvent.KEYCODE_MEDIA_RECORD:
- case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: {
- handleMediaKeyEvent(event);
- return true;
- }
-
- case KeyEvent.KEYCODE_VOLUME_UP:
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- case KeyEvent.KEYCODE_VOLUME_MUTE: {
- if (KEYGUARD_MANAGES_VOLUME) {
- synchronized (this) {
- if (mAudioManager == null) {
- mAudioManager = (AudioManager) getContext().getSystemService(
- Context.AUDIO_SERVICE);
- }
- }
- // Volume buttons should only function for music (local or remote).
- // TODO: Actually handle MUTE.
- mAudioManager.adjustLocalOrRemoteStreamVolume(
- AudioManager.STREAM_MUSIC,
- keyCode == KeyEvent.KEYCODE_VOLUME_UP
- ? AudioManager.ADJUST_RAISE
- : AudioManager.ADJUST_LOWER);
- // Don't execute default volume behavior
- return true;
- } else {
- return false;
- }
- }
- }
- } else if (event.getAction() == KeyEvent.ACTION_UP) {
- switch (keyCode) {
- case KeyEvent.KEYCODE_MUTE:
- case KeyEvent.KEYCODE_HEADSETHOOK:
- case KeyEvent.KEYCODE_MEDIA_PLAY:
- case KeyEvent.KEYCODE_MEDIA_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_STOP:
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- case KeyEvent.KEYCODE_MEDIA_REWIND:
- case KeyEvent.KEYCODE_MEDIA_RECORD:
- case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD: {
- handleMediaKeyEvent(event);
- return true;
- }
- }
- }
- return false;
- }
-
- void handleMediaKeyEvent(KeyEvent keyEvent) {
- IAudioService audioService = IAudioService.Stub.asInterface(
- ServiceManager.checkService(Context.AUDIO_SERVICE));
- if (audioService != null) {
- try {
- audioService.dispatchMediaKeyEvent(keyEvent);
- } catch (RemoteException e) {
- Log.e("KeyguardViewBase", "dispatchMediaKeyEvent threw exception " + e);
- }
- } else {
- Slog.w("KeyguardViewBase", "Unable to find IAudioService for media key event");
- }
- }
-
- @Override
- public void dispatchSystemUiVisibilityChanged(int visibility) {
- super.dispatchSystemUiVisibilityChanged(visibility);
- setSystemUiVisibility(STATUS_BAR_DISABLE_BACK);
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewCallback.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewCallback.java
deleted file mode 100644
index 4cc0f30..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewCallback.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-/**
- * The callback used by the keyguard view to tell the {@link KeyguardViewMediator}
- * various things.
- */
-public interface KeyguardViewCallback {
-
- /**
- * Request the wakelock to be poked for the default amount of time.
- */
- void pokeWakelock();
-
- /**
- * Request the wakelock to be poked for a specific amount of time.
- * @param millis The amount of time in millis.
- */
- void pokeWakelock(int millis);
-
- /**
- * Report that the keyguard is done.
- * @param authenticated Whether the user securely got past the keyguard.
- * the only reason for this to be false is if the keyguard was instructed
- * to appear temporarily to verify the user is supposed to get past the
- * keyguard, and the user fails to do so.
- */
- void keyguardDone(boolean authenticated);
-
- /**
- * Report that the keyguard is done drawing.
- */
- void keyguardDoneDrawing();
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewManager.java
deleted file mode 100644
index 5dbef48..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewManager.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Resources;
-import android.graphics.PixelFormat;
-import android.graphics.Canvas;
-import android.os.IBinder;
-import android.os.SystemProperties;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewManager;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-import android.graphics.Color;
-
-/**
- * Manages creating, showing, hiding and resetting the keyguard. Calls back
- * via {@link com.android.internal.policy.impl.KeyguardViewCallback} to poke
- * the wake lock and report that the keyguard is done, which is in turn,
- * reported to this class by the current {@link KeyguardViewBase}.
- */
-public class KeyguardViewManager implements KeyguardWindowController {
- private final static boolean DEBUG = false;
- private static String TAG = "KeyguardViewManager";
-
- private final Context mContext;
- private final ViewManager mViewManager;
- private final KeyguardViewCallback mCallback;
- private final KeyguardViewProperties mKeyguardViewProperties;
-
- private final KeyguardUpdateMonitor mUpdateMonitor;
-
- private WindowManager.LayoutParams mWindowLayoutParams;
- private boolean mNeedsInput = false;
-
- private FrameLayout mKeyguardHost;
- private KeyguardViewBase mKeyguardView;
-
- private boolean mScreenOn = false;
-
- public interface ShowListener {
- void onShown(IBinder windowToken);
- };
-
- /**
- * @param context Used to create views.
- * @param viewManager Keyguard will be attached to this.
- * @param callback Used to notify of changes.
- */
- public KeyguardViewManager(Context context, ViewManager viewManager,
- KeyguardViewCallback callback, KeyguardViewProperties keyguardViewProperties,
- KeyguardUpdateMonitor updateMonitor) {
- mContext = context;
- mViewManager = viewManager;
- mCallback = callback;
- mKeyguardViewProperties = keyguardViewProperties;
-
- mUpdateMonitor = updateMonitor;
- }
-
- /**
- * Helper class to host the keyguard view.
- */
- private static class KeyguardViewHost extends FrameLayout {
- private final KeyguardViewCallback mCallback;
-
- private KeyguardViewHost(Context context, KeyguardViewCallback callback) {
- super(context);
- mCallback = callback;
- }
-
- @Override
- protected void dispatchDraw(Canvas canvas) {
- super.dispatchDraw(canvas);
- mCallback.keyguardDoneDrawing();
- }
- }
-
- /**
- * Show the keyguard. Will handle creating and attaching to the view manager
- * lazily.
- */
- public synchronized void show() {
- if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView);
-
- Resources res = mContext.getResources();
- boolean enableScreenRotation =
- SystemProperties.getBoolean("lockscreen.rot_override",false)
- || res.getBoolean(R.bool.config_enableLockScreenRotation);
- if (mKeyguardHost == null) {
- if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
-
- mKeyguardHost = new KeyguardViewHost(mContext, mCallback);
-
- final int stretch = ViewGroup.LayoutParams.MATCH_PARENT;
- int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
- | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER
- | WindowManager.LayoutParams.FLAG_SLIPPERY
- /*| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
- | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR*/ ;
- if (!mNeedsInput) {
- flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
- }
- if (ActivityManager.isHighEndGfx()) {
- flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
- }
- WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
- stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD,
- flags, PixelFormat.TRANSLUCENT);
- lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
- lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen;
- if (ActivityManager.isHighEndGfx()) {
- lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
- lp.privateFlags |=
- WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED;
- }
- lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY;
- lp.setTitle("Keyguard");
- mWindowLayoutParams = lp;
-
- mViewManager.addView(mKeyguardHost, lp);
- }
-
- if (enableScreenRotation) {
- if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen On!");
- mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
- } else {
- if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen Off!");
- mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
- }
-
- mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-
- if (mKeyguardView == null) {
- if (DEBUG) Log.d(TAG, "keyguard view is null, creating it...");
- mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mCallback,
- mUpdateMonitor, this);
- mKeyguardView.setId(R.id.lock_screen);
-
- final ViewGroup.LayoutParams lp = new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT);
-
- mKeyguardHost.addView(mKeyguardView, lp);
-
- if (mScreenOn) {
- mKeyguardView.show();
- }
- }
-
- // Disable aspects of the system/status/navigation bars that are not appropriate or
- // useful for the lockscreen but can be re-shown by dialogs or SHOW_WHEN_LOCKED activities.
- // Other disabled bits are handled by the KeyguardViewMediator talking directly to the
- // status bar service.
- int visFlags =
- ( View.STATUS_BAR_DISABLE_BACK
- | View.STATUS_BAR_DISABLE_HOME
- );
- Log.v(TAG, "KGVM: Set visibility on " + mKeyguardHost + " to " + visFlags);
- mKeyguardHost.setSystemUiVisibility(visFlags);
-
- mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
- mKeyguardHost.setVisibility(View.VISIBLE);
- mKeyguardView.requestFocus();
- }
-
- public void setNeedsInput(boolean needsInput) {
- mNeedsInput = needsInput;
- if (mWindowLayoutParams != null) {
- if (needsInput) {
- mWindowLayoutParams.flags &=
- ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
- } else {
- mWindowLayoutParams.flags |=
- WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
- }
- mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
- }
- }
-
- /**
- * Reset the state of the view.
- */
- public synchronized void reset() {
- if (DEBUG) Log.d(TAG, "reset()");
- if (mKeyguardView != null) {
- mKeyguardView.reset();
- }
- }
-
- public synchronized void onScreenTurnedOff() {
- if (DEBUG) Log.d(TAG, "onScreenTurnedOff()");
- mScreenOn = false;
- if (mKeyguardView != null) {
- mKeyguardView.onScreenTurnedOff();
- }
- }
-
- public synchronized void onScreenTurnedOn(
- final KeyguardViewManager.ShowListener showListener) {
- if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
- mScreenOn = true;
- if (mKeyguardView != null) {
- mKeyguardView.onScreenTurnedOn();
-
- // Caller should wait for this window to be shown before turning
- // on the screen.
- if (mKeyguardHost.getVisibility() == View.VISIBLE) {
- // Keyguard may be in the process of being shown, but not yet
- // updated with the window manager... give it a chance to do so.
- mKeyguardHost.post(new Runnable() {
- public void run() {
- if (mKeyguardHost.getVisibility() == View.VISIBLE) {
- showListener.onShown(mKeyguardHost.getWindowToken());
- } else {
- showListener.onShown(null);
- }
- }
- });
- } else {
- showListener.onShown(null);
- }
- } else {
- showListener.onShown(null);
- }
- }
-
- public synchronized void verifyUnlock() {
- if (DEBUG) Log.d(TAG, "verifyUnlock()");
- show();
- mKeyguardView.verifyUnlock();
- }
-
- /**
- * A key has woken the device. We use this to potentially adjust the state
- * of the lock screen based on the key.
- *
- * The 'Tq' suffix is per the documentation in {@link android.view.WindowManagerPolicy}.
- * Be sure not to take any action that takes a long time; any significant
- * action should be posted to a handler.
- *
- * @param keyCode The wake key. May be {@link KeyEvent#KEYCODE_UNKNOWN} if waking
- * for a reason other than a key press.
- */
- public boolean wakeWhenReadyTq(int keyCode) {
- if (DEBUG) Log.d(TAG, "wakeWhenReady(" + keyCode + ")");
- if (mKeyguardView != null) {
- mKeyguardView.wakeWhenReadyTq(keyCode);
- return true;
- } else {
- Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq");
- return false;
- }
- }
-
- /**
- * Hides the keyguard view
- */
- public synchronized void hide() {
- if (DEBUG) Log.d(TAG, "hide()");
-
- if (mKeyguardHost != null) {
- mKeyguardHost.setVisibility(View.GONE);
- // Don't do this right away, so we can let the view continue to animate
- // as it goes away.
- if (mKeyguardView != null) {
- final KeyguardViewBase lastView = mKeyguardView;
- mKeyguardView = null;
- mKeyguardHost.postDelayed(new Runnable() {
- public void run() {
- synchronized (KeyguardViewManager.this) {
- lastView.cleanUp();
- mKeyguardHost.removeView(lastView);
- }
- }
- }, 500);
- }
- }
- }
-
- /**
- * @return Whether the keyguard is showing
- */
- public synchronized boolean isShowing() {
- return (mKeyguardHost != null && mKeyguardHost.getVisibility() == View.VISIBLE);
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java
deleted file mode 100644
index 3de1428..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java
+++ /dev/null
@@ -1,1302 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
-import com.android.internal.policy.impl.PhoneWindowManager;
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.app.ActivityManagerNative;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.app.StatusBarManager;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.SoundPool;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.util.EventLog;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
-
-
-/**
- * Mediates requests related to the keyguard. This includes queries about the
- * state of the keyguard, power management events that effect whether the keyguard
- * should be shown or reset, callbacks to the phone window manager to notify
- * it of when the keyguard is showing, and events from the keyguard view itself
- * stating that the keyguard was succesfully unlocked.
- *
- * Note that the keyguard view is shown when the screen is off (as appropriate)
- * so that once the screen comes on, it will be ready immediately.
- *
- * Example queries about the keyguard:
- * - is {movement, key} one that should wake the keygaurd?
- * - is the keyguard showing?
- * - are input events restricted due to the state of the keyguard?
- *
- * Callbacks to the phone window manager:
- * - the keyguard is showing
- *
- * Example external events that translate to keyguard view changes:
- * - screen turned off -> reset the keyguard, and show it so it will be ready
- * next time the screen turns on
- * - keyboard is slid open -> if the keyguard is not secure, hide it
- *
- * Events from the keyguard view:
- * - user succesfully unlocked keyguard -> hide keyguard view, and no longer
- * restrict input events.
- *
- * Note: in addition to normal power managment events that effect the state of
- * whether the keyguard should be showing, external apps and services may request
- * that the keyguard be disabled via {@link #setKeyguardEnabled(boolean)}. When
- * false, this will override all other conditions for turning on the keyguard.
- *
- * Threading and synchronization:
- * This class is created by the initialization routine of the {@link WindowManagerPolicy},
- * and runs on its thread. The keyguard UI is created from that thread in the
- * constructor of this class. The apis may be called from other threads, including the
- * {@link com.android.server.input.InputManagerService}'s and {@link android.view.WindowManager}'s.
- * Therefore, methods on this class are synchronized, and any action that is pointed
- * directly to the keyguard UI is posted to a {@link Handler} to ensure it is taken on the UI
- * thread of the keyguard.
- */
-public class KeyguardViewMediator implements KeyguardViewCallback {
- private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
- private final static boolean DEBUG = false;
- private final static boolean DBG_WAKE = false;
-
- private final static String TAG = "KeyguardViewMediator";
-
- private static final String DELAYED_KEYGUARD_ACTION =
- "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD";
-
- // used for handler messages
- private static final int TIMEOUT = 1;
- private static final int SHOW = 2;
- private static final int HIDE = 3;
- private static final int RESET = 4;
- private static final int VERIFY_UNLOCK = 5;
- private static final int NOTIFY_SCREEN_OFF = 6;
- private static final int NOTIFY_SCREEN_ON = 7;
- private static final int WAKE_WHEN_READY = 8;
- private static final int KEYGUARD_DONE = 9;
- private static final int KEYGUARD_DONE_DRAWING = 10;
- private static final int KEYGUARD_DONE_AUTHENTICATING = 11;
- private static final int SET_HIDDEN = 12;
- private static final int KEYGUARD_TIMEOUT = 13;
-
- /**
- * The default amount of time we stay awake (used for all key input)
- */
- protected static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
-
- /**
- * How long to wait after the screen turns off due to timeout before
- * turning on the keyguard (i.e, the user has this much time to turn
- * the screen back on without having to face the keyguard).
- */
- private static final int KEYGUARD_LOCK_AFTER_DELAY_DEFAULT = 5000;
-
- /**
- * How long we'll wait for the {@link KeyguardViewCallback#keyguardDoneDrawing()}
- * callback before unblocking a call to {@link #setKeyguardEnabled(boolean)}
- * that is reenabling the keyguard.
- */
- private static final int KEYGUARD_DONE_DRAWING_TIMEOUT_MS = 2000;
-
- /**
- * Allow the user to expand the status bar when the keyguard is engaged
- * (without a pattern or password).
- */
- private static final boolean ENABLE_INSECURE_STATUS_BAR_EXPAND = true;
-
- /** The stream type that the lock sounds are tied to. */
- private int mMasterStreamType;
-
- private Context mContext;
- private AlarmManager mAlarmManager;
- private AudioManager mAudioManager;
- private StatusBarManager mStatusBarManager;
- private boolean mShowLockIcon;
- private boolean mShowingLockIcon;
-
- private boolean mSystemReady;
-
- // Whether the next call to playSounds() should be skipped. Defaults to
- // true because the first lock (on boot) should be silent.
- private boolean mSuppressNextLockSound = true;
-
-
- /** High level access to the power manager for WakeLocks */
- private PowerManager mPM;
-
- /**
- * Used to keep the device awake while the keyguard is showing, i.e for
- * calls to {@link #pokeWakelock()}
- */
- private PowerManager.WakeLock mWakeLock;
-
- /**
- * Used to keep the device awake while to ensure the keyguard finishes opening before
- * we sleep.
- */
- private PowerManager.WakeLock mShowKeyguardWakeLock;
-
- /**
- * Does not turn on screen, held while a call to {@link KeyguardViewManager#wakeWhenReadyTq(int)}
- * is called to make sure the device doesn't sleep before it has a chance to poke
- * the wake lock.
- * @see #wakeWhenReadyLocked(int)
- */
- private PowerManager.WakeLock mWakeAndHandOff;
-
- private KeyguardViewManager mKeyguardViewManager;
-
- // these are protected by synchronized (this)
-
- /**
- * External apps (like the phone app) can tell us to disable the keygaurd.
- */
- private boolean mExternallyEnabled = true;
-
- /**
- * Remember if an external call to {@link #setKeyguardEnabled} with value
- * false caused us to hide the keyguard, so that we need to reshow it once
- * the keygaurd is reenabled with another call with value true.
- */
- private boolean mNeedToReshowWhenReenabled = false;
-
- // cached value of whether we are showing (need to know this to quickly
- // answer whether the input should be restricted)
- private boolean mShowing = false;
-
- // true if the keyguard is hidden by another window
- private boolean mHidden = false;
-
- /**
- * Helps remember whether the screen has turned on since the last time
- * it turned off due to timeout. see {@link #onScreenTurnedOff(int)}
- */
- private int mDelayedShowingSequence;
-
- private int mWakelockSequence;
-
- private PhoneWindowManager mCallback;
-
- /**
- * If the user has disabled the keyguard, then requests to exit, this is
- * how we'll ultimately let them know whether it was successful. We use this
- * var being non-null as an indicator that there is an in progress request.
- */
- private WindowManagerPolicy.OnKeyguardExitResult mExitSecureCallback;
-
- // the properties of the keyguard
- private KeyguardViewProperties mKeyguardViewProperties;
-
- private KeyguardUpdateMonitor mUpdateMonitor;
-
- private boolean mScreenOn;
-
- // last known state of the cellular connection
- private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
-
- /**
- * we send this intent when the keyguard is dismissed.
- */
- private Intent mUserPresentIntent;
-
- /**
- * {@link #setKeyguardEnabled} waits on this condition when it reenables
- * the keyguard.
- */
- private boolean mWaitingUntilKeyguardVisible = false;
- private LockPatternUtils mLockPatternUtils;
-
- private SoundPool mLockSounds;
- private int mLockSoundId;
- private int mUnlockSoundId;
- private int mLockSoundStreamId;
-
- /**
- * The volume applied to the lock/unlock sounds.
- */
- private final float mLockSoundVolume;
-
- KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
-
- @Override
- public void onUserSwitched(int userId) {
- mLockPatternUtils.setCurrentUser(userId);
- synchronized (KeyguardViewMediator.this) {
- resetStateLocked();
- }
- }
-
- @Override
- public void onUserRemoved(int userId) {
- mLockPatternUtils.removeUser(userId);
- }
-
- @Override
- void onPhoneStateChanged(int phoneState) {
- synchronized (KeyguardViewMediator.this) {
- if (TelephonyManager.CALL_STATE_IDLE == phoneState // call ending
- && !mScreenOn // screen off
- && mExternallyEnabled) { // not disabled by any app
-
- // note: this is a way to gracefully reenable the keyguard when the call
- // ends and the screen is off without always reenabling the keyguard
- // each time the screen turns off while in call (and having an occasional ugly
- // flicker while turning back on the screen and disabling the keyguard again).
- if (DEBUG) Log.d(TAG, "screen is off and call ended, let's make sure the "
- + "keyguard is showing");
- doKeyguardLocked();
- }
- }
- };
-
- @Override
- public void onClockVisibilityChanged() {
- adjustStatusBarLocked();
- }
-
- @Override
- public void onDeviceProvisioned() {
- mContext.sendBroadcastAsUser(mUserPresentIntent, UserHandle.ALL);
- }
-
- @Override
- public void onSimStateChanged(IccCardConstants.State simState) {
- if (DEBUG) Log.d(TAG, "onSimStateChanged: " + simState);
-
- switch (simState) {
- case NOT_READY:
- case ABSENT:
- // only force lock screen in case of missing sim if user hasn't
- // gone through setup wizard
- synchronized (this) {
- if (!mUpdateMonitor.isDeviceProvisioned()) {
- if (!isShowing()) {
- if (DEBUG) Log.d(TAG, "ICC_ABSENT isn't showing,"
- + " we need to show the keyguard since the "
- + "device isn't provisioned yet.");
- doKeyguardLocked();
- } else {
- resetStateLocked();
- }
- }
- }
- break;
- case PIN_REQUIRED:
- case PUK_REQUIRED:
- synchronized (this) {
- if (!isShowing()) {
- if (DEBUG) Log.d(TAG, "INTENT_VALUE_ICC_LOCKED and keygaurd isn't "
- + "showing; need to show keyguard so user can enter sim pin");
- doKeyguardLocked();
- } else {
- resetStateLocked();
- }
- }
- break;
- case PERM_DISABLED:
- synchronized (this) {
- if (!isShowing()) {
- if (DEBUG) Log.d(TAG, "PERM_DISABLED and "
- + "keygaurd isn't showing.");
- doKeyguardLocked();
- } else {
- if (DEBUG) Log.d(TAG, "PERM_DISABLED, resetStateLocked to"
- + "show permanently disabled message in lockscreen.");
- resetStateLocked();
- }
- }
- break;
- case READY:
- synchronized (this) {
- if (isShowing()) {
- resetStateLocked();
- }
- }
- break;
- }
- }
-
- };
-
- public KeyguardViewMediator(Context context, PhoneWindowManager callback) {
- mContext = context;
- mCallback = callback;
- mPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- mWakeLock = mPM.newWakeLock(
- PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "keyguard");
- mWakeLock.setReferenceCounted(false);
- mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard");
- mShowKeyguardWakeLock.setReferenceCounted(false);
-
- mWakeAndHandOff = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "keyguardWakeAndHandOff");
- mWakeAndHandOff.setReferenceCounted(false);
-
- mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(DELAYED_KEYGUARD_ACTION));
-
- mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-
- mUpdateMonitor = new KeyguardUpdateMonitor(context);
-
- mLockPatternUtils = new LockPatternUtils(mContext);
- mKeyguardViewProperties
- = new LockPatternKeyguardViewProperties(mLockPatternUtils, mUpdateMonitor);
-
- WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
- mKeyguardViewManager = new KeyguardViewManager(
- context, wm, this, mKeyguardViewProperties, mUpdateMonitor);
-
- mUserPresentIntent = new Intent(Intent.ACTION_USER_PRESENT);
- mUserPresentIntent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
- | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-
- final ContentResolver cr = mContext.getContentResolver();
- mShowLockIcon = (Settings.System.getInt(cr, "show_status_bar_lock", 0) == 1);
-
- mScreenOn = mPM.isScreenOn();
-
- mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
- String soundPath = Settings.Global.getString(cr, Settings.Global.LOCK_SOUND);
- if (soundPath != null) {
- mLockSoundId = mLockSounds.load(soundPath, 1);
- }
- if (soundPath == null || mLockSoundId == 0) {
- if (DEBUG) Log.d(TAG, "failed to load sound from " + soundPath);
- }
- soundPath = Settings.Global.getString(cr, Settings.Global.UNLOCK_SOUND);
- if (soundPath != null) {
- mUnlockSoundId = mLockSounds.load(soundPath, 1);
- }
- if (soundPath == null || mUnlockSoundId == 0) {
- if (DEBUG) Log.d(TAG, "failed to load sound from " + soundPath);
- }
- int lockSoundDefaultAttenuation = context.getResources().getInteger(
- com.android.internal.R.integer.config_lockSoundVolumeDb);
- mLockSoundVolume = (float)Math.pow(10, (float)lockSoundDefaultAttenuation/20);
- }
-
- /**
- * Let us know that the system is ready after startup.
- */
- public void onSystemReady() {
- synchronized (this) {
- if (DEBUG) Log.d(TAG, "onSystemReady");
- mSystemReady = true;
- mUpdateMonitor.registerCallback(mUpdateCallback);
- doKeyguardLocked();
- }
- }
-
- /**
- * Called to let us know the screen was turned off.
- * @param why either {@link WindowManagerPolicy#OFF_BECAUSE_OF_USER},
- * {@link WindowManagerPolicy#OFF_BECAUSE_OF_TIMEOUT} or
- * {@link WindowManagerPolicy#OFF_BECAUSE_OF_PROX_SENSOR}.
- */
- public void onScreenTurnedOff(int why) {
- synchronized (this) {
- mScreenOn = false;
- if (DEBUG) Log.d(TAG, "onScreenTurnedOff(" + why + ")");
-
- // Lock immediately based on setting if secure (user has a pin/pattern/password).
- // This also "locks" the device when not secure to provide easy access to the
- // camera while preventing unwanted input.
- final boolean lockImmediately =
- mLockPatternUtils.getPowerButtonInstantlyLocks() || !mLockPatternUtils.isSecure();
-
- if (mExitSecureCallback != null) {
- if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled");
- mExitSecureCallback.onKeyguardExitResult(false);
- mExitSecureCallback = null;
- if (!mExternallyEnabled) {
- hideLocked();
- }
- } else if (mShowing) {
- notifyScreenOffLocked();
- resetStateLocked();
- } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT
- || (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) {
- // if the screen turned off because of timeout or the user hit the power button
- // and we don't need to lock immediately, set an alarm
- // to enable it a little bit later (i.e, give the user a chance
- // to turn the screen back on within a certain window without
- // having to unlock the screen)
- final ContentResolver cr = mContext.getContentResolver();
-
- // From DisplaySettings
- long displayTimeout = Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT,
- KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT);
-
- // From SecuritySettings
- final long lockAfterTimeout = Settings.Secure.getInt(cr,
- Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
- KEYGUARD_LOCK_AFTER_DELAY_DEFAULT);
-
- // From DevicePolicyAdmin
- final long policyTimeout = mLockPatternUtils.getDevicePolicyManager()
- .getMaximumTimeToLock(null);
-
- long timeout;
- if (policyTimeout > 0) {
- // policy in effect. Make sure we don't go beyond policy limit.
- displayTimeout = Math.max(displayTimeout, 0); // ignore negative values
- timeout = Math.min(policyTimeout - displayTimeout, lockAfterTimeout);
- } else {
- timeout = lockAfterTimeout;
- }
-
- if (timeout <= 0) {
- // Lock now
- mSuppressNextLockSound = true;
- doKeyguardLocked();
- } else {
- // Lock in the future
- long when = SystemClock.elapsedRealtime() + timeout;
- Intent intent = new Intent(DELAYED_KEYGUARD_ACTION);
- intent.putExtra("seq", mDelayedShowingSequence);
- PendingIntent sender = PendingIntent.getBroadcast(mContext,
- 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
- mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender);
- if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = "
- + mDelayedShowingSequence);
- }
- } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_PROX_SENSOR) {
- // Do not enable the keyguard if the prox sensor forced the screen off.
- } else {
- doKeyguardLocked();
- }
- }
- }
-
- /**
- * Let's us know the screen was turned on.
- */
- public void onScreenTurnedOn(KeyguardViewManager.ShowListener showListener) {
- synchronized (this) {
- mScreenOn = true;
- mDelayedShowingSequence++;
- if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence);
- if (showListener != null) {
- notifyScreenOnLocked(showListener);
- }
- }
- }
-
- /**
- * Same semantics as {@link WindowManagerPolicy#enableKeyguard}; provide
- * a way for external stuff to override normal keyguard behavior. For instance
- * the phone app disables the keyguard when it receives incoming calls.
- */
- public void setKeyguardEnabled(boolean enabled) {
- synchronized (this) {
- if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");
-
-
- mExternallyEnabled = enabled;
-
- if (!enabled && mShowing) {
- if (mExitSecureCallback != null) {
- if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
- // we're in the process of handling a request to verify the user
- // can get past the keyguard. ignore extraneous requests to disable / reenable
- return;
- }
-
- // hiding keyguard that is showing, remember to reshow later
- if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "
- + "disabling status bar expansion");
- mNeedToReshowWhenReenabled = true;
- hideLocked();
- } else if (enabled && mNeedToReshowWhenReenabled) {
- // reenabled after previously hidden, reshow
- if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "
- + "status bar expansion");
- mNeedToReshowWhenReenabled = false;
-
- if (mExitSecureCallback != null) {
- if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
- mExitSecureCallback.onKeyguardExitResult(false);
- mExitSecureCallback = null;
- resetStateLocked();
- } else {
- showLocked();
-
- // block until we know the keygaurd is done drawing (and post a message
- // to unblock us after a timeout so we don't risk blocking too long
- // and causing an ANR).
- mWaitingUntilKeyguardVisible = true;
- mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
- if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
- while (mWaitingUntilKeyguardVisible) {
- try {
- wait();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
- }
- }
- }
- }
-
- /**
- * @see android.app.KeyguardManager#exitKeyguardSecurely
- */
- public void verifyUnlock(WindowManagerPolicy.OnKeyguardExitResult callback) {
- synchronized (this) {
- if (DEBUG) Log.d(TAG, "verifyUnlock");
- if (!mUpdateMonitor.isDeviceProvisioned()) {
- // don't allow this api when the device isn't provisioned
- if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned");
- callback.onKeyguardExitResult(false);
- } else if (mExternallyEnabled) {
- // this only applies when the user has externally disabled the
- // keyguard. this is unexpected and means the user is not
- // using the api properly.
- Log.w(TAG, "verifyUnlock called when not externally disabled");
- callback.onKeyguardExitResult(false);
- } else if (mExitSecureCallback != null) {
- // already in progress with someone else
- callback.onKeyguardExitResult(false);
- } else {
- mExitSecureCallback = callback;
- verifyUnlockLocked();
- }
- }
- }
-
- /**
- * Is the keyguard currently showing?
- */
- public boolean isShowing() {
- return mShowing;
- }
-
- /**
- * Is the keyguard currently showing and not being force hidden?
- */
- public boolean isShowingAndNotHidden() {
- return mShowing && !mHidden;
- }
-
- /**
- * Notify us when the keyguard is hidden by another window
- */
- public void setHidden(boolean isHidden) {
- if (DEBUG) Log.d(TAG, "setHidden " + isHidden);
- mHandler.removeMessages(SET_HIDDEN);
- Message msg = mHandler.obtainMessage(SET_HIDDEN, (isHidden ? 1 : 0), 0);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Handles SET_HIDDEN message sent by setHidden()
- */
- private void handleSetHidden(boolean isHidden) {
- synchronized (KeyguardViewMediator.this) {
- if (mHidden != isHidden) {
- mHidden = isHidden;
- updateActivityLockScreenState();
- adjustUserActivityLocked();
- adjustStatusBarLocked();
- }
- }
- }
-
- /**
- * Used by PhoneWindowManager to enable the keyguard due to a user activity timeout.
- * This must be safe to call from any thread and with any window manager locks held.
- */
- public void doKeyguardTimeout() {
- mHandler.removeMessages(KEYGUARD_TIMEOUT);
- Message msg = mHandler.obtainMessage(KEYGUARD_TIMEOUT);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Given the state of the keyguard, is the input restricted?
- * Input is restricted when the keyguard is showing, or when the keyguard
- * was suppressed by an app that disabled the keyguard or we haven't been provisioned yet.
- */
- public boolean isInputRestricted() {
- return mShowing || mNeedToReshowWhenReenabled || !mUpdateMonitor.isDeviceProvisioned();
- }
-
- /**
- * Enable the keyguard if the settings are appropriate. Return true if all
- * work that will happen is done; returns false if the caller can wait for
- * the keyguard to be shown.
- */
- private void doKeyguardLocked() {
- // if another app is disabling us, don't show
- if (!mExternallyEnabled) {
- if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
-
- // note: we *should* set mNeedToReshowWhenReenabled=true here, but that makes
- // for an occasional ugly flicker in this situation:
- // 1) receive a call with the screen on (no keyguard) or make a call
- // 2) screen times out
- // 3) user hits key to turn screen back on
- // instead, we reenable the keyguard when we know the screen is off and the call
- // ends (see the broadcast receiver below)
- // TODO: clean this up when we have better support at the window manager level
- // for apps that wish to be on top of the keyguard
- return;
- }
-
- // if the keyguard is already showing, don't bother
- if (mKeyguardViewManager.isShowing()) {
- if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing");
- return;
- }
-
- // if the setup wizard hasn't run yet, don't show
- final boolean requireSim = !SystemProperties.getBoolean("keyguard.no_require_sim",
- false);
- final boolean provisioned = mUpdateMonitor.isDeviceProvisioned();
- final IccCardConstants.State state = mUpdateMonitor.getSimState();
- final boolean lockedOrMissing = state.isPinLocked()
- || ((state == IccCardConstants.State.ABSENT
- || state == IccCardConstants.State.PERM_DISABLED)
- && requireSim);
-
- if (!lockedOrMissing && !provisioned) {
- if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
- + " and the sim is not locked or missing");
- return;
- }
-
- if (mLockPatternUtils.isLockScreenDisabled() && !lockedOrMissing) {
- if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
- return;
- }
-
- if (DEBUG) Log.d(TAG, "doKeyguard: showing the lock screen");
- showLocked();
- }
-
- /**
- * Send message to keyguard telling it to reset its state.
- * @see #handleReset()
- */
- private void resetStateLocked() {
- if (DEBUG) Log.d(TAG, "resetStateLocked");
- Message msg = mHandler.obtainMessage(RESET);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Send message to keyguard telling it to verify unlock
- * @see #handleVerifyUnlock()
- */
- private void verifyUnlockLocked() {
- if (DEBUG) Log.d(TAG, "verifyUnlockLocked");
- mHandler.sendEmptyMessage(VERIFY_UNLOCK);
- }
-
-
- /**
- * Send a message to keyguard telling it the screen just turned on.
- * @see #onScreenTurnedOff(int)
- * @see #handleNotifyScreenOff
- */
- private void notifyScreenOffLocked() {
- if (DEBUG) Log.d(TAG, "notifyScreenOffLocked");
- mHandler.sendEmptyMessage(NOTIFY_SCREEN_OFF);
- }
-
- /**
- * Send a message to keyguard telling it the screen just turned on.
- * @see #onScreenTurnedOn()
- * @see #handleNotifyScreenOn
- */
- private void notifyScreenOnLocked(KeyguardViewManager.ShowListener showListener) {
- if (DEBUG) Log.d(TAG, "notifyScreenOnLocked");
- Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, showListener);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Send message to keyguard telling it about a wake key so it can adjust
- * its state accordingly and then poke the wake lock when it is ready.
- * @param keyCode The wake key.
- * @see #handleWakeWhenReady
- * @see #onWakeKeyWhenKeyguardShowingTq(int)
- */
- private void wakeWhenReadyLocked(int keyCode) {
- if (DBG_WAKE) Log.d(TAG, "wakeWhenReadyLocked(" + keyCode + ")");
-
- /**
- * acquire the handoff lock that will keep the cpu running. this will
- * be released once the keyguard has set itself up and poked the other wakelock
- * in {@link #handleWakeWhenReady(int)}
- */
- mWakeAndHandOff.acquire();
-
- Message msg = mHandler.obtainMessage(WAKE_WHEN_READY, keyCode, 0);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Send message to keyguard telling it to show itself
- * @see #handleShow()
- */
- private void showLocked() {
- if (DEBUG) Log.d(TAG, "showLocked");
- // ensure we stay awake until we are finished displaying the keyguard
- mShowKeyguardWakeLock.acquire();
- Message msg = mHandler.obtainMessage(SHOW);
- mHandler.sendMessage(msg);
- }
-
- /**
- * Send message to keyguard telling it to hide itself
- * @see #handleHide()
- */
- private void hideLocked() {
- if (DEBUG) Log.d(TAG, "hideLocked");
- Message msg = mHandler.obtainMessage(HIDE);
- mHandler.sendMessage(msg);
- }
-
- public boolean isSecure() {
- return mKeyguardViewProperties.isSecure();
- }
-
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (DELAYED_KEYGUARD_ACTION.equals(intent.getAction())) {
- final int sequence = intent.getIntExtra("seq", 0);
- if (DEBUG) Log.d(TAG, "received DELAYED_KEYGUARD_ACTION with seq = "
- + sequence + ", mDelayedShowingSequence = " + mDelayedShowingSequence);
- synchronized (KeyguardViewMediator.this) {
- if (mDelayedShowingSequence == sequence) {
- // Don't play lockscreen SFX if the screen went off due to timeout.
- mSuppressNextLockSound = true;
- doKeyguardLocked();
- }
- }
- }
- }
- };
-
- /**
- * When a key is received when the screen is off and the keyguard is showing,
- * we need to decide whether to actually turn on the screen, and if so, tell
- * the keyguard to prepare itself and poke the wake lock when it is ready.
- *
- * The 'Tq' suffix is per the documentation in {@link WindowManagerPolicy}.
- * Be sure not to take any action that takes a long time; any significant
- * action should be posted to a handler.
- *
- * @param keyCode The keycode of the key that woke the device
- * @param isDocked True if the device is in the dock
- * @return Whether we poked the wake lock (and turned the screen on)
- */
- public boolean onWakeKeyWhenKeyguardShowingTq(int keyCode, boolean isDocked) {
- if (DEBUG) Log.d(TAG, "onWakeKeyWhenKeyguardShowing(" + keyCode + ")");
-
- if (isWakeKeyWhenKeyguardShowing(keyCode, isDocked)) {
- // give the keyguard view manager a chance to adjust the state of the
- // keyguard based on the key that woke the device before poking
- // the wake lock
- wakeWhenReadyLocked(keyCode);
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * When the keyguard is showing we ignore some keys that might otherwise typically
- * be considered wake keys. We filter them out here.
- *
- * {@link KeyEvent#KEYCODE_POWER} is notably absent from this list because it
- * is always considered a wake key.
- */
- private boolean isWakeKeyWhenKeyguardShowing(int keyCode, boolean isDocked) {
- switch (keyCode) {
- // ignore volume keys unless docked
- case KeyEvent.KEYCODE_VOLUME_UP:
- case KeyEvent.KEYCODE_VOLUME_DOWN:
- case KeyEvent.KEYCODE_VOLUME_MUTE:
- return isDocked;
-
- // ignore media and camera keys
- case KeyEvent.KEYCODE_MUTE:
- case KeyEvent.KEYCODE_HEADSETHOOK:
- case KeyEvent.KEYCODE_MEDIA_PLAY:
- case KeyEvent.KEYCODE_MEDIA_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
- case KeyEvent.KEYCODE_MEDIA_STOP:
- case KeyEvent.KEYCODE_MEDIA_NEXT:
- case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
- case KeyEvent.KEYCODE_MEDIA_REWIND:
- case KeyEvent.KEYCODE_MEDIA_RECORD:
- case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
- case KeyEvent.KEYCODE_CAMERA:
- return false;
- }
- return true;
- }
-
- /**
- * When a wake motion such as an external mouse movement is received when the screen
- * is off and the keyguard is showing, we need to decide whether to actually turn
- * on the screen, and if so, tell the keyguard to prepare itself and poke the wake
- * lock when it is ready.
- *
- * The 'Tq' suffix is per the documentation in {@link WindowManagerPolicy}.
- * Be sure not to take any action that takes a long time; any significant
- * action should be posted to a handler.
- *
- * @return Whether we poked the wake lock (and turned the screen on)
- */
- public boolean onWakeMotionWhenKeyguardShowingTq() {
- if (DEBUG) Log.d(TAG, "onWakeMotionWhenKeyguardShowing()");
-
- // give the keyguard view manager a chance to adjust the state of the
- // keyguard based on the key that woke the device before poking
- // the wake lock
- wakeWhenReadyLocked(KeyEvent.KEYCODE_UNKNOWN);
- return true;
- }
-
- /**
- * Callbacks from {@link KeyguardViewManager}.
- */
-
- /** {@inheritDoc} */
- public void pokeWakelock() {
- pokeWakelock(AWAKE_INTERVAL_DEFAULT_MS);
- }
-
- /** {@inheritDoc} */
- public void pokeWakelock(int holdMs) {
- synchronized (this) {
- if (DBG_WAKE) Log.d(TAG, "pokeWakelock(" + holdMs + ")");
- mWakeLock.acquire();
- mHandler.removeMessages(TIMEOUT);
- mWakelockSequence++;
- Message msg = mHandler.obtainMessage(TIMEOUT, mWakelockSequence, 0);
- mHandler.sendMessageDelayed(msg, holdMs);
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * @see #handleKeyguardDone
- */
- public void keyguardDone(boolean authenticated) {
- keyguardDone(authenticated, true);
- }
-
- public void keyguardDone(boolean authenticated, boolean wakeup) {
- synchronized (this) {
- EventLog.writeEvent(70000, 2);
- if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
- Message msg = mHandler.obtainMessage(KEYGUARD_DONE);
- msg.arg1 = wakeup ? 1 : 0;
- mHandler.sendMessage(msg);
-
- if (authenticated) {
- mUpdateMonitor.clearFailedAttempts();
- }
-
- if (mExitSecureCallback != null) {
- mExitSecureCallback.onKeyguardExitResult(authenticated);
- mExitSecureCallback = null;
-
- if (authenticated) {
- // after succesfully exiting securely, no need to reshow
- // the keyguard when they've released the lock
- mExternallyEnabled = true;
- mNeedToReshowWhenReenabled = false;
- }
- }
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * @see #handleKeyguardDoneDrawing
- */
- public void keyguardDoneDrawing() {
- mHandler.sendEmptyMessage(KEYGUARD_DONE_DRAWING);
- }
-
- /**
- * This handler will be associated with the policy thread, which will also
- * be the UI thread of the keyguard. Since the apis of the policy, and therefore
- * this class, can be called by other threads, any action that directly
- * interacts with the keyguard ui should be posted to this handler, rather
- * than called directly.
- */
- private Handler mHandler = new Handler(true /*async*/) {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case TIMEOUT:
- handleTimeout(msg.arg1);
- return ;
- case SHOW:
- handleShow();
- return ;
- case HIDE:
- handleHide();
- return ;
- case RESET:
- handleReset();
- return ;
- case VERIFY_UNLOCK:
- handleVerifyUnlock();
- return;
- case NOTIFY_SCREEN_OFF:
- handleNotifyScreenOff();
- return;
- case NOTIFY_SCREEN_ON:
- handleNotifyScreenOn((KeyguardViewManager.ShowListener)msg.obj);
- return;
- case WAKE_WHEN_READY:
- handleWakeWhenReady(msg.arg1);
- return;
- case KEYGUARD_DONE:
- handleKeyguardDone(msg.arg1 != 0);
- return;
- case KEYGUARD_DONE_DRAWING:
- handleKeyguardDoneDrawing();
- return;
- case KEYGUARD_DONE_AUTHENTICATING:
- keyguardDone(true);
- return;
- case SET_HIDDEN:
- handleSetHidden(msg.arg1 != 0);
- break;
- case KEYGUARD_TIMEOUT:
- synchronized (KeyguardViewMediator.this) {
- doKeyguardLocked();
- }
- break;
- }
- }
- };
-
- /**
- * @see #keyguardDone
- * @see #KEYGUARD_DONE
- */
- private void handleKeyguardDone(boolean wakeup) {
- if (DEBUG) Log.d(TAG, "handleKeyguardDone");
- handleHide();
- if (wakeup) {
- mPM.wakeUp(SystemClock.uptimeMillis());
- }
- mWakeLock.release();
-
- final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser());
- mContext.sendBroadcastAsUser(mUserPresentIntent, currentUser);
- }
-
- /**
- * @see #keyguardDoneDrawing
- * @see #KEYGUARD_DONE_DRAWING
- */
- private void handleKeyguardDoneDrawing() {
- synchronized(this) {
- if (false) Log.d(TAG, "handleKeyguardDoneDrawing");
- if (mWaitingUntilKeyguardVisible) {
- if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing: notifying mWaitingUntilKeyguardVisible");
- mWaitingUntilKeyguardVisible = false;
- notifyAll();
-
- // there will usually be two of these sent, one as a timeout, and one
- // as a result of the callback, so remove any remaining messages from
- // the queue
- mHandler.removeMessages(KEYGUARD_DONE_DRAWING);
- }
- }
- }
-
- /**
- * Handles the message sent by {@link #pokeWakelock}
- * @param seq used to determine if anything has changed since the message
- * was sent.
- * @see #TIMEOUT
- */
- private void handleTimeout(int seq) {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleTimeout");
- if (seq == mWakelockSequence) {
- mWakeLock.release();
- }
- }
- }
-
- private void playSounds(boolean locked) {
- // User feedback for keyguard.
-
- if (mSuppressNextLockSound) {
- mSuppressNextLockSound = false;
- return;
- }
-
- final ContentResolver cr = mContext.getContentResolver();
- if (Settings.System.getInt(cr, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) == 1) {
- final int whichSound = locked
- ? mLockSoundId
- : mUnlockSoundId;
- mLockSounds.stop(mLockSoundStreamId);
- // Init mAudioManager
- if (mAudioManager == null) {
- mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
- if (mAudioManager == null) return;
- mMasterStreamType = mAudioManager.getMasterStreamType();
- }
- // If the stream is muted, don't play the sound
- if (mAudioManager.isStreamMute(mMasterStreamType)) return;
-
- mLockSoundStreamId = mLockSounds.play(whichSound,
- mLockSoundVolume, mLockSoundVolume, 1/*priortiy*/, 0/*loop*/, 1.0f/*rate*/);
- }
- }
-
- private void updateActivityLockScreenState() {
- try {
- ActivityManagerNative.getDefault().setLockScreenShown(
- mShowing && !mHidden);
- } catch (RemoteException e) {
- }
- }
-
- /**
- * Handle message sent by {@link #showLocked}.
- * @see #SHOW
- */
- private void handleShow() {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleShow");
- if (!mSystemReady) return;
-
- mKeyguardViewManager.show();
- mShowing = true;
- updateActivityLockScreenState();
- adjustUserActivityLocked();
- adjustStatusBarLocked();
- try {
- ActivityManagerNative.getDefault().closeSystemDialogs("lock");
- } catch (RemoteException e) {
- }
-
- // Do this at the end to not slow down display of the keyguard.
- playSounds(true);
-
- mShowKeyguardWakeLock.release();
- }
- }
-
- /**
- * Handle message sent by {@link #hideLocked()}
- * @see #HIDE
- */
- private void handleHide() {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleHide");
- if (mWakeAndHandOff.isHeld()) {
- Log.w(TAG, "attempt to hide the keyguard while waking, ignored");
- return;
- }
-
- // only play "unlock" noises if not on a call (since the incall UI
- // disables the keyguard)
- if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState)) {
- playSounds(false);
- }
-
- mKeyguardViewManager.hide();
- mShowing = false;
- updateActivityLockScreenState();
- adjustUserActivityLocked();
- adjustStatusBarLocked();
- }
- }
-
- private void adjustUserActivityLocked() {
- // disable user activity if we are shown and not hidden
- if (DEBUG) Log.d(TAG, "adjustUserActivityLocked mShowing: " + mShowing + " mHidden: " + mHidden);
- boolean enabled = !mShowing || mHidden;
- // FIXME: Replace this with a new timeout control mechanism.
- //mRealPowerManager.enableUserActivity(enabled);
- if (!enabled && mScreenOn) {
- // reinstate our short screen timeout policy
- pokeWakelock();
- }
- }
-
- private void adjustStatusBarLocked() {
- if (mStatusBarManager == null) {
- mStatusBarManager = (StatusBarManager)
- mContext.getSystemService(Context.STATUS_BAR_SERVICE);
- }
- if (mStatusBarManager == null) {
- Log.w(TAG, "Could not get status bar manager");
- } else {
- if (mShowLockIcon) {
- // Give feedback to user when secure keyguard is active and engaged
- if (mShowing && isSecure()) {
- if (!mShowingLockIcon) {
- String contentDescription = mContext.getString(
- com.android.internal.R.string.status_bar_device_locked);
- mStatusBarManager.setIcon("secure",
- com.android.internal.R.drawable.stat_sys_secure, 0,
- contentDescription);
- mShowingLockIcon = true;
- }
- } else {
- if (mShowingLockIcon) {
- mStatusBarManager.removeIcon("secure");
- mShowingLockIcon = false;
- }
- }
- }
-
- // Disable aspects of the system/status/navigation bars that must not be re-enabled by
- // windows that appear on top, ever
- int flags = StatusBarManager.DISABLE_NONE;
- if (mShowing) {
- // disable navigation status bar components (home, recents) if lock screen is up
- flags |= StatusBarManager.DISABLE_RECENT;
- if (isSecure() || !ENABLE_INSECURE_STATUS_BAR_EXPAND) {
- // showing secure lockscreen; disable expanding.
- flags |= StatusBarManager.DISABLE_EXPAND;
- }
- if (isSecure()) {
- // showing secure lockscreen; disable ticker.
- flags |= StatusBarManager.DISABLE_NOTIFICATION_TICKER;
- }
- }
-
- if (DEBUG) {
- Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mHidden=" + mHidden
- + " isSecure=" + isSecure() + " --> flags=0x" + Integer.toHexString(flags));
- }
-
- mStatusBarManager.disable(flags);
- }
- }
-
- /**
- * Handle message sent by {@link #wakeWhenReadyLocked(int)}
- * @param keyCode The key that woke the device.
- * @see #WAKE_WHEN_READY
- */
- private void handleWakeWhenReady(int keyCode) {
- synchronized (KeyguardViewMediator.this) {
- if (DBG_WAKE) Log.d(TAG, "handleWakeWhenReady(" + keyCode + ")");
-
- // this should result in a call to 'poke wakelock' which will set a timeout
- // on releasing the wakelock
- if (!mKeyguardViewManager.wakeWhenReadyTq(keyCode)) {
- // poke wakelock ourselves if keyguard is no longer active
- Log.w(TAG, "mKeyguardViewManager.wakeWhenReadyTq did not poke wake lock, so poke it ourselves");
- pokeWakelock();
- }
-
- /**
- * Now that the keyguard is ready and has poked the wake lock, we can
- * release the handoff wakelock
- */
- mWakeAndHandOff.release();
-
- if (!mWakeLock.isHeld()) {
- Log.w(TAG, "mWakeLock not held in mKeyguardViewManager.wakeWhenReadyTq");
- }
- }
- }
-
- /**
- * Handle message sent by {@link #resetStateLocked()}
- * @see #RESET
- */
- private void handleReset() {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleReset");
- mKeyguardViewManager.reset();
- }
- }
-
- /**
- * Handle message sent by {@link #verifyUnlock}
- * @see #RESET
- */
- private void handleVerifyUnlock() {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleVerifyUnlock");
- mKeyguardViewManager.verifyUnlock();
- mShowing = true;
- updateActivityLockScreenState();
- }
- }
-
- /**
- * Handle message sent by {@link #notifyScreenOffLocked()}
- * @see #NOTIFY_SCREEN_OFF
- */
- private void handleNotifyScreenOff() {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleNotifyScreenOff");
- mKeyguardViewManager.onScreenTurnedOff();
- }
- }
-
- /**
- * Handle message sent by {@link #notifyScreenOnLocked()}
- * @see #NOTIFY_SCREEN_ON
- */
- private void handleNotifyScreenOn(KeyguardViewManager.ShowListener showListener) {
- synchronized (KeyguardViewMediator.this) {
- if (DEBUG) Log.d(TAG, "handleNotifyScreenOn");
- mKeyguardViewManager.onScreenTurnedOn(showListener);
- }
- }
-
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewProperties.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewProperties.java
deleted file mode 100644
index 676574d..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewProperties.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.content.Context;
-
-/**
- * Defines operations necessary for showing a keyguard, including how to create
- * it, and various properties that are useful to be able to query independant
- * of whether the keyguard instance is around or not.
- */
-public interface KeyguardViewProperties {
-
- /**
- * Create a keyguard view.
- * @param context the context to use when creating the view.
- * @param callback keyguard callback object for pokewakelock(), etc.
- * @param updateMonitor configuration may be based on this.
- * @param controller for talking back with the containing window.
- * @return the view.
- */
- KeyguardViewBase createKeyguardView(Context context,
- KeyguardViewCallback mCallback, KeyguardUpdateMonitor updateMonitor,
- KeyguardWindowController controller);
-
- /**
- * Would the keyguard be secure right now?
- * @return Whether the keyguard is currently secure, meaning it will block
- * the user from getting past it until the user enters some sort of PIN.
- */
- boolean isSecure();
-
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardWindowController.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardWindowController.java
deleted file mode 100644
index 98e3209..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardWindowController.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-/**
- * Interface passed to the keyguard view, for it to call up to control
- * its containing window.
- */
-public interface KeyguardWindowController {
- /**
- * Control whether the window needs input -- that is if it has
- * text fields and thus should allow input method interaction.
- */
- void setNeedsInput(boolean needsInput);
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardView.java
deleted file mode 100644
index 4dc83b6..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardView.java
+++ /dev/null
@@ -1,1220 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.LockScreenWidgetCallback;
-import com.android.internal.widget.TransportControlView;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AccountManagerCallback;
-import android.accounts.AccountManagerFuture;
-import android.accounts.AuthenticatorException;
-import android.accounts.OperationCanceledException;
-import android.app.AlertDialog;
-import android.app.admin.DevicePolicyManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.PixelFormat;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.os.PowerManager;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Slog;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.WindowManager;
-import android.view.accessibility.AccessibilityManager;
-
-import java.io.IOException;
-
-
-/**
- * The host view for all of the screens of the pattern unlock screen. There are
- * two {@link Mode}s of operation, lock and unlock. This will show the appropriate
- * screen, and listen for callbacks via
- * {@link com.android.internal.policy.impl.KeyguardScreenCallback}
- * from the current screen.
- *
- * This view, in turn, communicates back to
- * {@link com.android.internal.policy.impl.KeyguardViewManager}
- * via its {@link com.android.internal.policy.impl.KeyguardViewCallback}, as appropriate.
- */
-public class LockPatternKeyguardView extends KeyguardViewBase {
-
- private static final int TRANSPORT_USERACTIVITY_TIMEOUT = 10000;
-
- static final boolean DEBUG_CONFIGURATION = false;
-
- // time after launching EmergencyDialer before the screen goes blank.
- private static final int EMERGENCY_CALL_TIMEOUT = 10000;
-
- // intent action for launching emergency dialer activity.
- static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
-
- private static final boolean DEBUG = false;
- private static final String TAG = "LockPatternKeyguardView";
-
- private final KeyguardUpdateMonitor mUpdateMonitor;
- private final KeyguardWindowController mWindowController;
-
- private View mLockScreen;
- private View mUnlockScreen;
-
- private boolean mScreenOn;
- private boolean mWindowFocused = false;
- private boolean mEnableFallback = false; // assume no fallback UI until we know better
-
- private boolean mShowLockBeforeUnlock = false;
-
- // Interface to a biometric sensor that can optionally be used to unlock the device
- private BiometricSensorUnlock mBiometricUnlock;
- private final Object mBiometricUnlockStartupLock = new Object();
- // Long enough to stay visible while dialer comes up
- // Short enough to not be visible if the user goes back immediately
- private final int BIOMETRIC_AREA_EMERGENCY_DIALER_TIMEOUT = 1000;
-
- private boolean mRequiresSim;
- // True if the biometric unlock should not be displayed. For example, if there is an overlay on
- // lockscreen or the user is plugging in / unplugging the device.
- private boolean mSuppressBiometricUnlock;
- //True if a dialog is currently displaying on top of this window
- //Unlike other overlays, this does not close with a power button cycle
- private boolean mHasDialog = false;
- //True if this device is currently plugged in
- private boolean mPluggedIn;
- // True the first time lockscreen is showing after boot
- private static boolean sIsFirstAppearanceAfterBoot = true;
-
- // The music control widget
- private TransportControlView mTransportControlView;
-
- private Parcelable mSavedState;
-
- /**
- * Either a lock screen (an informational keyguard screen), or an unlock
- * screen (a means for unlocking the device) is shown at any given time.
- */
- enum Mode {
- LockScreen,
- UnlockScreen
- }
-
- /**
- * The different types screens available for {@link Mode#UnlockScreen}.
- * @see com.android.internal.policy.impl.LockPatternKeyguardView#getUnlockMode()
- */
- enum UnlockMode {
-
- /**
- * Unlock by drawing a pattern.
- */
- Pattern,
-
- /**
- * Unlock by entering a sim pin.
- */
- SimPin,
-
- /**
- * Unlock by entering a sim puk.
- */
- SimPuk,
-
- /**
- * Unlock by entering an account's login and password.
- */
- Account,
-
- /**
- * Unlock by entering a password or PIN
- */
- Password,
-
- /**
- * Unknown (uninitialized) value
- */
- Unknown
- }
-
- /**
- * The current mode.
- */
- private Mode mMode = Mode.LockScreen;
-
- /**
- * Keeps track of what mode the current unlock screen is (cached from most recent computation in
- * {@link #getUnlockMode}).
- */
- private UnlockMode mUnlockScreenMode = UnlockMode.Unknown;
-
- private boolean mForgotPattern;
-
- /**
- * If true, it means we are in the process of verifying that the user
- * can get past the lock screen per {@link #verifyUnlock()}
- */
- private boolean mIsVerifyUnlockOnly = false;
-
- /**
- * Used to lookup the state of the lock pattern
- */
- private final LockPatternUtils mLockPatternUtils;
-
- /**
- * The current configuration.
- */
- private Configuration mConfiguration;
-
- private Runnable mRecreateRunnable = new Runnable() {
- public void run() {
- Mode mode = mMode;
- // If we were previously in a locked state but now it's Unknown, it means the phone
- // was previously locked because of SIM state and has since been resolved. This
- // bit of code checks this condition and dismisses keyguard.
- boolean dismissAfterCreation = false;
- if (mode == Mode.UnlockScreen && getUnlockMode() == UnlockMode.Unknown) {
- if (DEBUG) Log.v(TAG, "Switch to Mode.LockScreen because SIM unlocked");
- mode = Mode.LockScreen;
- dismissAfterCreation = true;
- }
- updateScreen(mode, true);
- restoreWidgetState();
- if (dismissAfterCreation) {
- mKeyguardScreenCallback.keyguardDone(false);
- }
- }
- };
-
- private LockScreenWidgetCallback mWidgetCallback = new LockScreenWidgetCallback() {
- public void userActivity(View self) {
- mKeyguardScreenCallback.pokeWakelock(TRANSPORT_USERACTIVITY_TIMEOUT);
- }
-
- public void requestShow(View view) {
- if (DEBUG) Log.v(TAG, "View " + view + " requested show transports");
- view.setVisibility(View.VISIBLE);
-
- // TODO: examine all widgets to derive clock status
- mUpdateMonitor.reportClockVisible(false);
-
- // If there's not a bg protection view containing the transport, then show a black
- // background. Otherwise, allow the normal background to show.
- if (findViewById(R.id.transport_bg_protect) == null) {
- // TODO: We should disable the wallpaper instead
- setBackgroundColor(0xff000000);
- } else {
- resetBackground();
- }
- }
-
- public void requestHide(View view) {
- if (DEBUG) Log.v(TAG, "View " + view + " requested hide transports");
- view.setVisibility(View.GONE);
-
- // TODO: examine all widgets to derive clock status
- mUpdateMonitor.reportClockVisible(true);
- resetBackground();
- }
-
- public boolean isVisible(View self) {
- // TODO: this should be up to the lockscreen to determine if the view
- // is currently showing. The idea is it can be used for the widget to
- // avoid doing work if it's not visible. For now just returns the view's
- // actual visibility.
- return self.getVisibility() == View.VISIBLE;
- }
- };
-
- /**
- * @return Whether we are stuck on the lock screen because the sim is
- * missing.
- */
- private boolean stuckOnLockScreenBecauseSimMissing() {
- return mRequiresSim
- && (!mUpdateMonitor.isDeviceProvisioned())
- && (mUpdateMonitor.getSimState() == IccCardConstants.State.ABSENT ||
- mUpdateMonitor.getSimState() == IccCardConstants.State.PERM_DISABLED);
- }
-
- /**
- * The current {@link KeyguardScreen} will use this to communicate back to us.
- */
- KeyguardScreenCallback mKeyguardScreenCallback = new KeyguardScreenCallback() {
-
- public void goToLockScreen() {
- mForgotPattern = false;
- if (mIsVerifyUnlockOnly) {
- // navigating away from unlock screen during verify mode means
- // we are done and the user failed to authenticate.
- mIsVerifyUnlockOnly = false;
- getCallback().keyguardDone(false);
- } else {
- updateScreen(Mode.LockScreen, false);
- }
- }
-
- public void goToUnlockScreen() {
- final IccCardConstants.State simState = mUpdateMonitor.getSimState();
- if (stuckOnLockScreenBecauseSimMissing()
- || (simState == IccCardConstants.State.PUK_REQUIRED
- && !mLockPatternUtils.isPukUnlockScreenEnable())){
- // stuck on lock screen when sim missing or
- // puk'd but puk unlock screen is disabled
- return;
- }
- if (!isSecure()) {
- getCallback().keyguardDone(true);
- } else {
- updateScreen(Mode.UnlockScreen, false);
- }
- }
-
- public void forgotPattern(boolean isForgotten) {
- if (mEnableFallback) {
- mForgotPattern = isForgotten;
- updateScreen(Mode.UnlockScreen, false);
- }
- }
-
- public boolean isSecure() {
- return LockPatternKeyguardView.this.isSecure();
- }
-
- public boolean isVerifyUnlockOnly() {
- return mIsVerifyUnlockOnly;
- }
-
- public void recreateMe(Configuration config) {
- if (DEBUG) Log.v(TAG, "recreateMe()");
- removeCallbacks(mRecreateRunnable);
- post(mRecreateRunnable);
- }
-
- public void takeEmergencyCallAction() {
- mSuppressBiometricUnlock = true;
-
- if (mBiometricUnlock != null) {
- if (mBiometricUnlock.isRunning()) {
- // Continue covering backup lock until dialer comes up or call is resumed
- mBiometricUnlock.show(BIOMETRIC_AREA_EMERGENCY_DIALER_TIMEOUT);
- }
-
- // We must ensure the biometric unlock is stopped when emergency call is pressed
- mBiometricUnlock.stop();
- }
-
- pokeWakelock(EMERGENCY_CALL_TIMEOUT);
- if (TelephonyManager.getDefault().getCallState()
- == TelephonyManager.CALL_STATE_OFFHOOK) {
- mLockPatternUtils.resumeCall();
- } else {
- Intent intent = new Intent(ACTION_EMERGENCY_DIAL);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- getContext().startActivity(intent);
- }
- }
-
- public void pokeWakelock() {
- getCallback().pokeWakelock();
- }
-
- public void pokeWakelock(int millis) {
- getCallback().pokeWakelock(millis);
- }
-
- public void keyguardDone(boolean authenticated) {
- getCallback().keyguardDone(authenticated);
- mSavedState = null; // clear state so we re-establish when locked again
- }
-
- public void keyguardDoneDrawing() {
- // irrelevant to keyguard screen, they shouldn't be calling this
- }
-
- public void reportFailedUnlockAttempt() {
- mUpdateMonitor.reportFailedAttempt();
- final int failedAttempts = mUpdateMonitor.getFailedAttempts();
- if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts +
- " (enableFallback=" + mEnableFallback + ")");
-
- final boolean usingPattern = mLockPatternUtils.getKeyguardStoredPasswordQuality()
- == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
-
- final int failedAttemptsBeforeWipe = mLockPatternUtils.getDevicePolicyManager()
- .getMaximumFailedPasswordsForWipe(null);
-
- final int failedAttemptWarning = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
- - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
-
- final int remainingBeforeWipe = failedAttemptsBeforeWipe > 0 ?
- (failedAttemptsBeforeWipe - failedAttempts)
- : Integer.MAX_VALUE; // because DPM returns 0 if no restriction
-
- if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) {
- // If we reach this code, it means the user has installed a DevicePolicyManager
- // that requests device wipe after N attempts. Once we get below the grace
- // period, we'll post this dialog every time as a clear warning until the
- // bombshell hits and the device is wiped.
- if (remainingBeforeWipe > 0) {
- showAlmostAtWipeDialog(failedAttempts, remainingBeforeWipe);
- } else {
- // Too many attempts. The device will be wiped shortly.
- Slog.i(TAG, "Too many unlock attempts; device will be wiped!");
- showWipeDialog(failedAttempts);
- }
- } else {
- boolean showTimeout =
- (failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
- if (usingPattern && mEnableFallback) {
- if (failedAttempts == failedAttemptWarning) {
- showAlmostAtAccountLoginDialog();
- showTimeout = false; // don't show both dialogs
- } else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
- mLockPatternUtils.setPermanentlyLocked(true);
- updateScreen(mMode, false);
- // don't show timeout dialog because we show account unlock screen next
- showTimeout = false;
- }
- }
- if (showTimeout) {
- showTimeoutDialog();
- }
- }
- mLockPatternUtils.reportFailedPasswordAttempt();
- }
-
- public boolean doesFallbackUnlockScreenExist() {
- return mEnableFallback;
- }
-
- public void reportSuccessfulUnlockAttempt() {
- mLockPatternUtils.reportSuccessfulPasswordAttempt();
- }
- };
-
- /**
- * @param context Used to inflate, and create views.
- * @param callback Keyguard callback object for pokewakelock(), etc.
- * @param updateMonitor Knows the state of the world, and passed along to each
- * screen so they can use the knowledge, and also register for callbacks
- * on dynamic information.
- * @param lockPatternUtils Used to look up state of lock pattern.
- */
- public LockPatternKeyguardView(
- Context context, KeyguardViewCallback callback, KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardWindowController controller) {
- super(context, callback);
-
- mConfiguration = context.getResources().getConfiguration();
- mEnableFallback = false;
- mRequiresSim = TextUtils.isEmpty(SystemProperties.get("keyguard.no_require_sim"));
- mUpdateMonitor = updateMonitor;
- mLockPatternUtils = lockPatternUtils;
- mWindowController = controller;
- mSuppressBiometricUnlock = sIsFirstAppearanceAfterBoot;
- sIsFirstAppearanceAfterBoot = false;
- mScreenOn = ((PowerManager)context.getSystemService(Context.POWER_SERVICE)).isScreenOn();
- mUpdateMonitor.registerCallback(mInfoCallback);
-
- /**
- * We'll get key events the current screen doesn't use. see
- * {@link KeyguardViewBase#onKeyDown(int, android.view.KeyEvent)}
- */
- setFocusableInTouchMode(true);
- setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
-
- updateScreen(getInitialMode(), false);
- maybeEnableFallback(context);
- }
-
- private class AccountAnalyzer implements AccountManagerCallback<Bundle> {
- private final AccountManager mAccountManager;
- private final Account[] mAccounts;
- private int mAccountIndex;
-
- private AccountAnalyzer(AccountManager accountManager) {
- mAccountManager = accountManager;
- mAccounts = accountManager.getAccountsByType("com.google");
- }
-
- private void next() {
- // if we are ready to enable the fallback or if we depleted the list of accounts
- // then finish and get out
- if (mEnableFallback || mAccountIndex >= mAccounts.length) {
- if (mUnlockScreen == null) {
- if (DEBUG) Log.w(TAG, "no unlock screen when trying to enable fallback");
- } else if (mUnlockScreen instanceof PatternUnlockScreen) {
- ((PatternUnlockScreen)mUnlockScreen).setEnableFallback(mEnableFallback);
- }
- return;
- }
-
- // lookup the confirmCredentials intent for the current account
- mAccountManager.confirmCredentials(mAccounts[mAccountIndex], null, null, this, null);
- }
-
- public void start() {
- mEnableFallback = false;
- mAccountIndex = 0;
- next();
- }
-
- public void run(AccountManagerFuture<Bundle> future) {
- try {
- Bundle result = future.getResult();
- if (result.getParcelable(AccountManager.KEY_INTENT) != null) {
- mEnableFallback = true;
- }
- } catch (OperationCanceledException e) {
- // just skip the account if we are unable to query it
- } catch (IOException e) {
- // just skip the account if we are unable to query it
- } catch (AuthenticatorException e) {
- // just skip the account if we are unable to query it
- } finally {
- mAccountIndex++;
- next();
- }
- }
- }
-
- private void maybeEnableFallback(Context context) {
- // Ask the account manager if we have an account that can be used as a
- // fallback in case the user forgets his pattern.
- AccountAnalyzer accountAnalyzer = new AccountAnalyzer(AccountManager.get(context));
- accountAnalyzer.start();
- }
-
-
- // TODO:
- // This overloaded method was added to workaround a race condition in the framework between
- // notification for orientation changed, layout() and switching resources. This code attempts
- // to avoid drawing the incorrect layout while things are in transition. The method can just
- // be removed once the race condition is fixed. See bugs 2262578 and 2292713.
- @Override
- protected void dispatchDraw(Canvas canvas) {
- if (DEBUG) Log.v(TAG, "*** dispatchDraw() time: " + SystemClock.elapsedRealtime());
- super.dispatchDraw(canvas);
- }
-
- @Override
- public void reset() {
- mIsVerifyUnlockOnly = false;
- mForgotPattern = false;
- if (DEBUG) Log.v(TAG, "reset()");
- post(mRecreateRunnable);
- }
-
- @Override
- public void onScreenTurnedOff() {
- if (DEBUG) Log.d(TAG, "screen off");
- mScreenOn = false;
- mForgotPattern = false;
-
- // Emulate activity life-cycle for both lock and unlock screen.
- if (mLockScreen != null) {
- ((KeyguardScreen) mLockScreen).onPause();
- }
- if (mUnlockScreen != null) {
- ((KeyguardScreen) mUnlockScreen).onPause();
- }
-
- saveWidgetState();
-
- if (mBiometricUnlock != null) {
- // The biometric unlock must stop when screen turns off.
- mBiometricUnlock.stop();
- }
- }
-
- @Override
- public void onScreenTurnedOn() {
- if (DEBUG) Log.d(TAG, "screen on");
- boolean startBiometricUnlock = false;
- // Start the biometric unlock if and only if the screen is both on and focused
- synchronized(mBiometricUnlockStartupLock) {
- mScreenOn = true;
- startBiometricUnlock = mWindowFocused;
- }
-
- show();
-
- restoreWidgetState();
-
- if (mBiometricUnlock != null && startBiometricUnlock) {
- maybeStartBiometricUnlock();
- }
- }
-
- private void saveWidgetState() {
- if (mTransportControlView != null) {
- if (DEBUG) Log.v(TAG, "Saving widget state");
- mSavedState = mTransportControlView.onSaveInstanceState();
- }
- }
-
- private void restoreWidgetState() {
- if (mTransportControlView != null) {
- if (DEBUG) Log.v(TAG, "Restoring widget state");
- if (mSavedState != null) {
- mTransportControlView.onRestoreInstanceState(mSavedState);
- }
- }
- }
-
- /**
- * Stop the biometric unlock if something covers this window (such as an alarm)
- * Start the biometric unlock if the lockscreen window just came into focus and the screen is on
- */
- @Override
- public void onWindowFocusChanged (boolean hasWindowFocus) {
- if (DEBUG) Log.d(TAG, hasWindowFocus ? "focused" : "unfocused");
-
- boolean startBiometricUnlock = false;
- // Start the biometric unlock if and only if the screen is both on and focused
- synchronized(mBiometricUnlockStartupLock) {
- if (mScreenOn && !mWindowFocused) startBiometricUnlock = hasWindowFocus;
- mWindowFocused = hasWindowFocus;
- }
- if (!hasWindowFocus) {
- if (mBiometricUnlock != null) {
- mSuppressBiometricUnlock = true;
- mBiometricUnlock.stop();
- mBiometricUnlock.hide();
- }
- } else {
- mHasDialog = false;
- if (mBiometricUnlock != null && startBiometricUnlock) {
- maybeStartBiometricUnlock();
- }
- }
- }
-
- @Override
- public void show() {
- // Emulate activity life-cycle for both lock and unlock screen.
- if (mLockScreen != null) {
- ((KeyguardScreen) mLockScreen).onResume();
- }
- if (mUnlockScreen != null) {
- ((KeyguardScreen) mUnlockScreen).onResume();
- }
-
- if (mBiometricUnlock != null && mSuppressBiometricUnlock) {
- mBiometricUnlock.hide();
- }
- }
-
- private void recreateLockScreen() {
- if (mLockScreen != null) {
- ((KeyguardScreen) mLockScreen).onPause();
- ((KeyguardScreen) mLockScreen).cleanUp();
- removeView(mLockScreen);
- }
-
- mLockScreen = createLockScreen();
- mLockScreen.setVisibility(View.INVISIBLE);
- addView(mLockScreen);
- }
-
- private void recreateUnlockScreen(UnlockMode unlockMode) {
- if (mUnlockScreen != null) {
- ((KeyguardScreen) mUnlockScreen).onPause();
- ((KeyguardScreen) mUnlockScreen).cleanUp();
- removeView(mUnlockScreen);
- }
-
- mUnlockScreen = createUnlockScreenFor(unlockMode);
- mUnlockScreen.setVisibility(View.INVISIBLE);
- addView(mUnlockScreen);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- mUpdateMonitor.removeCallback(mInfoCallback);
-
- removeCallbacks(mRecreateRunnable);
-
- if (mBiometricUnlock != null) {
- // When view is hidden, we need to stop the biometric unlock
- // e.g., when device becomes unlocked
- mBiometricUnlock.stop();
- }
-
- super.onDetachedFromWindow();
- }
-
- protected void onConfigurationChanged(Configuration newConfig) {
- Resources resources = getResources();
- mShowLockBeforeUnlock = resources.getBoolean(R.bool.config_enableLockBeforeUnlockScreen);
- mConfiguration = newConfig;
- if (DEBUG_CONFIGURATION) Log.v(TAG, "**** re-creating lock screen since config changed");
- saveWidgetState();
- removeCallbacks(mRecreateRunnable);
- if (DEBUG) Log.v(TAG, "recreating lockscreen because config changed");
- post(mRecreateRunnable);
- }
-
- KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
-
- @Override
- public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) {
- // When someone plugs in or unplugs the device, we hide the biometric sensor area and
- // suppress its startup for the next onScreenTurnedOn(). Since plugging/unplugging
- // causes the screen to turn on, the biometric unlock would start if it wasn't
- // suppressed.
- //
- // However, if the biometric unlock is already running, we do not want to interrupt it.
- final boolean pluggedIn = status.isPluggedIn();
- if (mBiometricUnlock != null && mPluggedIn != pluggedIn
- && !mBiometricUnlock.isRunning()) {
- mBiometricUnlock.stop();
- mBiometricUnlock.hide();
- mSuppressBiometricUnlock = true;
- }
- mPluggedIn = pluggedIn;
- }
-
- @Override
- public void onClockVisibilityChanged() {
- int visFlags = (getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_CLOCK)
- | (mUpdateMonitor.isClockVisible() ? View.STATUS_BAR_DISABLE_CLOCK : 0);
- Log.v(TAG, "Set visibility on " + this + " to " + visFlags);
- setSystemUiVisibility(visFlags);
- }
-
- // We need to stop the biometric unlock when a phone call comes in
- @Override
- public void onPhoneStateChanged(int phoneState) {
- if (DEBUG) Log.d(TAG, "phone state: " + phoneState);
- if (mBiometricUnlock != null && phoneState == TelephonyManager.CALL_STATE_RINGING) {
- mSuppressBiometricUnlock = true;
- mBiometricUnlock.stop();
- mBiometricUnlock.hide();
- }
- }
-
- @Override
- public void onUserSwitched(int userId) {
- if (mBiometricUnlock != null) {
- mBiometricUnlock.stop();
- }
- mLockPatternUtils.setCurrentUser(userId);
- updateScreen(getInitialMode(), true);
- }
- };
-
- @Override
- protected boolean dispatchHoverEvent(MotionEvent event) {
- // Do not let the screen to get locked while the user is disabled and touch
- // exploring. A blind user will need significantly more time to find and
- // interact with the lock screen views.
- AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(mContext);
- if (accessibilityManager.isEnabled() && accessibilityManager.isTouchExplorationEnabled()) {
- getCallback().pokeWakelock();
- }
- return super.dispatchHoverEvent(event);
- }
-
- @Override
- public void wakeWhenReadyTq(int keyCode) {
- if (DEBUG) Log.d(TAG, "onWakeKey");
- if (keyCode == KeyEvent.KEYCODE_MENU && isSecure() && (mMode == Mode.LockScreen)
- && (mUpdateMonitor.getSimState() != IccCardConstants.State.PUK_REQUIRED)) {
- if (DEBUG) Log.d(TAG, "switching screens to unlock screen because wake key was MENU");
- updateScreen(Mode.UnlockScreen, false);
- getCallback().pokeWakelock();
- } else {
- if (DEBUG) Log.d(TAG, "poking wake lock immediately");
- getCallback().pokeWakelock();
- }
- }
-
- @Override
- public void verifyUnlock() {
- if (!isSecure()) {
- // non-secure keyguard screens are successfull by default
- getCallback().keyguardDone(true);
- } else if (mUnlockScreenMode != UnlockMode.Pattern
- && mUnlockScreenMode != UnlockMode.Password) {
- // can only verify unlock when in pattern/password mode
- getCallback().keyguardDone(false);
- } else {
- // otherwise, go to the unlock screen, see if they can verify it
- mIsVerifyUnlockOnly = true;
- updateScreen(Mode.UnlockScreen, false);
- }
- }
-
- @Override
- public void cleanUp() {
- if (mLockScreen != null) {
- ((KeyguardScreen) mLockScreen).onPause();
- ((KeyguardScreen) mLockScreen).cleanUp();
- this.removeView(mLockScreen);
- mLockScreen = null;
- }
- if (mUnlockScreen != null) {
- ((KeyguardScreen) mUnlockScreen).onPause();
- ((KeyguardScreen) mUnlockScreen).cleanUp();
- this.removeView(mUnlockScreen);
- mUnlockScreen = null;
- }
- mUpdateMonitor.removeCallback(this);
- if (mBiometricUnlock != null) {
- mBiometricUnlock.cleanUp();
- }
- }
-
- private boolean isSecure() {
- UnlockMode unlockMode = getUnlockMode();
- boolean secure = false;
- switch (unlockMode) {
- case Pattern:
- secure = mLockPatternUtils.isLockPatternEnabled();
- break;
- case SimPin:
- secure = mUpdateMonitor.getSimState() == IccCardConstants.State.PIN_REQUIRED;
- break;
- case SimPuk:
- secure = mUpdateMonitor.getSimState() == IccCardConstants.State.PUK_REQUIRED;
- break;
- case Account:
- secure = true;
- break;
- case Password:
- secure = mLockPatternUtils.isLockPasswordEnabled();
- break;
- case Unknown:
- // This means no security is set up
- break;
- default:
- throw new IllegalStateException("unknown unlock mode " + unlockMode);
- }
- return secure;
- }
-
- private void updateScreen(Mode mode, boolean force) {
-
- if (DEBUG_CONFIGURATION) Log.v(TAG, "**** UPDATE SCREEN: mode=" + mode
- + " last mode=" + mMode + ", force = " + force, new RuntimeException());
-
- mMode = mode;
-
- // Re-create the lock screen if necessary
- if (mode == Mode.LockScreen || mShowLockBeforeUnlock) {
- if (force || mLockScreen == null) {
- recreateLockScreen();
- }
- }
-
- // Re-create the unlock screen if necessary.
- final UnlockMode unlockMode = getUnlockMode();
- if (mode == Mode.UnlockScreen && unlockMode != UnlockMode.Unknown) {
- if (force || mUnlockScreen == null || unlockMode != mUnlockScreenMode) {
- recreateUnlockScreen(unlockMode);
- }
- }
-
- // visibleScreen should never be null
- final View goneScreen = (mode == Mode.LockScreen) ? mUnlockScreen : mLockScreen;
- final View visibleScreen = (mode == Mode.LockScreen) ? mLockScreen : mUnlockScreen;
-
- // do this before changing visibility so focus isn't requested before the input
- // flag is set
- mWindowController.setNeedsInput(((KeyguardScreen)visibleScreen).needsInput());
-
- if (DEBUG_CONFIGURATION) {
- Log.v(TAG, "Gone=" + goneScreen);
- Log.v(TAG, "Visible=" + visibleScreen);
- }
-
- if (mScreenOn) {
- if (goneScreen != null && goneScreen.getVisibility() == View.VISIBLE) {
- ((KeyguardScreen) goneScreen).onPause();
- }
- if (visibleScreen.getVisibility() != View.VISIBLE) {
- ((KeyguardScreen) visibleScreen).onResume();
- }
- }
-
- if (goneScreen != null) {
- goneScreen.setVisibility(View.GONE);
- }
- visibleScreen.setVisibility(View.VISIBLE);
- requestLayout();
-
- if (!visibleScreen.requestFocus()) {
- throw new IllegalStateException("keyguard screen must be able to take "
- + "focus when shown " + visibleScreen.getClass().getCanonicalName());
- }
- }
-
- View createLockScreen() {
- View lockView = new LockScreen(
- mContext,
- mConfiguration,
- mLockPatternUtils,
- mUpdateMonitor,
- mKeyguardScreenCallback);
- initializeTransportControlView(lockView);
- return lockView;
- }
-
- View createUnlockScreenFor(UnlockMode unlockMode) {
- View unlockView = null;
-
- if (DEBUG) Log.d(TAG,
- "createUnlockScreenFor(" + unlockMode + "): mEnableFallback=" + mEnableFallback);
-
- if (unlockMode == UnlockMode.Pattern) {
- PatternUnlockScreen view = new PatternUnlockScreen(
- mContext,
- mConfiguration,
- mLockPatternUtils,
- mUpdateMonitor,
- mKeyguardScreenCallback,
- mUpdateMonitor.getFailedAttempts());
- view.setEnableFallback(mEnableFallback);
- unlockView = view;
- } else if (unlockMode == UnlockMode.SimPuk) {
- unlockView = new SimPukUnlockScreen(
- mContext,
- mConfiguration,
- mUpdateMonitor,
- mKeyguardScreenCallback,
- mLockPatternUtils);
- } else if (unlockMode == UnlockMode.SimPin) {
- unlockView = new SimUnlockScreen(
- mContext,
- mConfiguration,
- mUpdateMonitor,
- mKeyguardScreenCallback,
- mLockPatternUtils);
- } else if (unlockMode == UnlockMode.Account) {
- try {
- unlockView = new AccountUnlockScreen(
- mContext,
- mConfiguration,
- mUpdateMonitor,
- mKeyguardScreenCallback,
- mLockPatternUtils);
- } catch (IllegalStateException e) {
- Log.i(TAG, "Couldn't instantiate AccountUnlockScreen"
- + " (IAccountsService isn't available)");
- // TODO: Need a more general way to provide a
- // platform-specific fallback UI here.
- // For now, if we can't display the account login
- // unlock UI, just bring back the regular "Pattern" unlock mode.
-
- // (We do this by simply returning a regular UnlockScreen
- // here. This means that the user will still see the
- // regular pattern unlock UI, regardless of the value of
- // mUnlockScreenMode or whether or not we're in the
- // "permanently locked" state.)
- return createUnlockScreenFor(UnlockMode.Pattern);
- }
- } else if (unlockMode == UnlockMode.Password) {
- unlockView = new PasswordUnlockScreen(
- mContext,
- mConfiguration,
- mLockPatternUtils,
- mUpdateMonitor,
- mKeyguardScreenCallback);
- } else {
- throw new IllegalArgumentException("unknown unlock mode " + unlockMode);
- }
- initializeTransportControlView(unlockView);
- initializeBiometricUnlockView(unlockView);
-
- mUnlockScreenMode = unlockMode;
- return unlockView;
- }
-
- private void initializeTransportControlView(View view) {
- mTransportControlView = (TransportControlView) view.findViewById(R.id.transport);
- if (mTransportControlView == null) {
- if (DEBUG) Log.w(TAG, "Couldn't find transport control widget");
- } else {
- mUpdateMonitor.reportClockVisible(true);
- mTransportControlView.setVisibility(View.GONE); // hide until it requests being shown.
- mTransportControlView.setCallback(mWidgetCallback);
- }
- }
-
- /**
- * This returns false if there is any condition that indicates that the biometric unlock should
- * not be used before the next time the unlock screen is recreated. In other words, if this
- * returns false there is no need to even construct the biometric unlock.
- */
- private boolean useBiometricUnlock() {
- final UnlockMode unlockMode = getUnlockMode();
- final boolean backupIsTimedOut = (mUpdateMonitor.getFailedAttempts() >=
- LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT);
- return (mLockPatternUtils.usingBiometricWeak() &&
- mLockPatternUtils.isBiometricWeakInstalled() &&
- !mUpdateMonitor.getMaxBiometricUnlockAttemptsReached() &&
- !backupIsTimedOut &&
- (unlockMode == UnlockMode.Pattern || unlockMode == UnlockMode.Password));
- }
-
- private void initializeBiometricUnlockView(View view) {
- boolean restartBiometricUnlock = false;
-
- if (mBiometricUnlock != null) {
- restartBiometricUnlock = mBiometricUnlock.stop();
- }
-
- // Prevents biometric unlock from coming up immediately after a phone call or if there
- // is a dialog on top of lockscreen. It is only updated if the screen is off because if the
- // screen is on it's either because of an orientation change, or when it first boots.
- // In both those cases, we don't want to override the current value of
- // mSuppressBiometricUnlock and instead want to use the previous value.
- if (!mScreenOn) {
- mSuppressBiometricUnlock =
- mUpdateMonitor.getPhoneState() != TelephonyManager.CALL_STATE_IDLE
- || mHasDialog;
- }
-
- // If the biometric unlock is not being used, we don't bother constructing it. Then we can
- // simply check if it is null when deciding whether we should make calls to it.
- mBiometricUnlock = null;
- if (useBiometricUnlock()) {
- // TODO: make faceLockAreaView a more general biometricUnlockView
- // We will need to add our Face Unlock specific child views programmatically in
- // initializeView rather than having them in the XML files.
- View biometricUnlockView = view.findViewById(R.id.face_unlock_area_view);
- if (biometricUnlockView != null) {
- mBiometricUnlock = new FaceUnlock(mContext, mUpdateMonitor, mLockPatternUtils,
- mKeyguardScreenCallback);
- mBiometricUnlock.initializeView(biometricUnlockView);
-
- // If this is being called because the screen turned off, we want to cover the
- // backup lock so it is covered when the screen turns back on.
- if (!mScreenOn) mBiometricUnlock.show(0);
- } else {
- Log.w(TAG, "Couldn't find biometric unlock view");
- }
- }
-
- if (mBiometricUnlock != null && restartBiometricUnlock) {
- maybeStartBiometricUnlock();
- }
- }
-
- /**
- * Given the current state of things, what should be the initial mode of
- * the lock screen (lock or unlock).
- */
- private Mode getInitialMode() {
- final IccCardConstants.State simState = mUpdateMonitor.getSimState();
- if (stuckOnLockScreenBecauseSimMissing() ||
- (simState == IccCardConstants.State.PUK_REQUIRED &&
- !mLockPatternUtils.isPukUnlockScreenEnable())) {
- return Mode.LockScreen;
- } else {
- if (!isSecure() || mShowLockBeforeUnlock) {
- return Mode.LockScreen;
- } else {
- return Mode.UnlockScreen;
- }
- }
- }
-
- /**
- * Given the current state of things, what should the unlock screen be?
- */
- private UnlockMode getUnlockMode() {
- final IccCardConstants.State simState = mUpdateMonitor.getSimState();
- UnlockMode currentMode;
- if (simState == IccCardConstants.State.PIN_REQUIRED) {
- currentMode = UnlockMode.SimPin;
- } else if (simState == IccCardConstants.State.PUK_REQUIRED) {
- currentMode = UnlockMode.SimPuk;
- } else {
- final int mode = mLockPatternUtils.getKeyguardStoredPasswordQuality();
- switch (mode) {
- case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
- case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC:
- case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC:
- case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX:
- currentMode = UnlockMode.Password;
- break;
- case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
- case DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED:
- if (mLockPatternUtils.isLockPatternEnabled()) {
- // "forgot pattern" button is only available in the pattern mode...
- if (mForgotPattern || mLockPatternUtils.isPermanentlyLocked()) {
- currentMode = UnlockMode.Account;
- } else {
- currentMode = UnlockMode.Pattern;
- }
- } else {
- currentMode = UnlockMode.Unknown;
- }
- break;
- default:
- throw new IllegalStateException("Unknown unlock mode:" + mode);
- }
- }
- return currentMode;
- }
-
- private void showDialog(String title, String message) {
- mHasDialog = true;
- final AlertDialog dialog = new AlertDialog.Builder(mContext)
- .setTitle(title)
- .setMessage(message)
- .setNeutralButton(R.string.ok, null)
- .create();
- dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- dialog.show();
- }
-
- private void showTimeoutDialog() {
- int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
- int messageId = R.string.lockscreen_too_many_failed_attempts_dialog_message;
- if (getUnlockMode() == UnlockMode.Password) {
- if(mLockPatternUtils.getKeyguardStoredPasswordQuality() ==
- DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
- messageId = R.string.lockscreen_too_many_failed_pin_attempts_dialog_message;
- } else {
- messageId = R.string.lockscreen_too_many_failed_password_attempts_dialog_message;
- }
- }
- String message = mContext.getString(messageId, mUpdateMonitor.getFailedAttempts(),
- timeoutInSeconds);
-
- showDialog(null, message);
- }
-
- private void showAlmostAtAccountLoginDialog() {
- final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
- final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
- - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
- String message = mContext.getString(R.string.lockscreen_failed_attempts_almost_glogin,
- count, LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT, timeoutInSeconds);
- showDialog(null, message);
- }
-
- private void showAlmostAtWipeDialog(int attempts, int remaining) {
- int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
- String message = mContext.getString(
- R.string.lockscreen_failed_attempts_almost_at_wipe, attempts, remaining);
- showDialog(null, message);
- }
-
- private void showWipeDialog(int attempts) {
- String message = mContext.getString(
- R.string.lockscreen_failed_attempts_now_wiping, attempts);
- showDialog(null, message);
- }
-
- /**
- * Used to put wallpaper on the background of the lock screen. Centers it
- * Horizontally and pins the bottom (assuming that the lock screen is aligned
- * with the bottom, so the wallpaper should extend above the top into the
- * status bar).
- */
- static private class FastBitmapDrawable extends Drawable {
- private Bitmap mBitmap;
- private int mOpacity;
-
- private FastBitmapDrawable(Bitmap bitmap) {
- mBitmap = bitmap;
- mOpacity = mBitmap.hasAlpha() ? PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE;
- }
-
- @Override
- public void draw(Canvas canvas) {
- canvas.drawBitmap(
- mBitmap,
- (getBounds().width() - mBitmap.getWidth()) / 2,
- (getBounds().height() - mBitmap.getHeight()),
- null);
- }
-
- @Override
- public int getOpacity() {
- return mOpacity;
- }
-
- @Override
- public void setAlpha(int alpha) {
- }
-
- @Override
- public void setColorFilter(ColorFilter cf) {
- }
-
- @Override
- public int getIntrinsicWidth() {
- return mBitmap.getWidth();
- }
-
- @Override
- public int getIntrinsicHeight() {
- return mBitmap.getHeight();
- }
-
- @Override
- public int getMinimumWidth() {
- return mBitmap.getWidth();
- }
-
- @Override
- public int getMinimumHeight() {
- return mBitmap.getHeight();
- }
- }
-
- /**
- * Starts the biometric unlock if it should be started based on a number of factors including
- * the mSuppressBiometricUnlock flag. If it should not be started, it hides the biometric
- * unlock area.
- */
- private void maybeStartBiometricUnlock() {
- if (mBiometricUnlock != null) {
- final boolean backupIsTimedOut = (mUpdateMonitor.getFailedAttempts() >=
- LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT);
- if (!mSuppressBiometricUnlock
- && mUpdateMonitor.getPhoneState() == TelephonyManager.CALL_STATE_IDLE
- && !mUpdateMonitor.getMaxBiometricUnlockAttemptsReached()
- && !backupIsTimedOut) {
- mBiometricUnlock.start();
- } else {
- mBiometricUnlock.hide();
- }
- }
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewProperties.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewProperties.java
deleted file mode 100644
index 5d9cc8e..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewProperties.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.widget.LockPatternUtils;
-
-import android.content.Context;
-import com.android.internal.telephony.IccCardConstants;
-
-/**
- * Knows how to create a lock pattern keyguard view, and answer questions about
- * it (even if it hasn't been created, per the interface specs).
- */
-public class LockPatternKeyguardViewProperties implements KeyguardViewProperties {
-
- private final LockPatternUtils mLockPatternUtils;
- private final KeyguardUpdateMonitor mUpdateMonitor;
-
- /**
- * @param lockPatternUtils Used to know whether the pattern enabled, and passed
- * onto the keygaurd view when it is created.
- * @param updateMonitor Used to know whether the sim pin is enabled, and passed
- * onto the keyguard view when it is created.
- */
- public LockPatternKeyguardViewProperties(LockPatternUtils lockPatternUtils,
- KeyguardUpdateMonitor updateMonitor) {
- mLockPatternUtils = lockPatternUtils;
- mUpdateMonitor = updateMonitor;
- }
-
- public KeyguardViewBase createKeyguardView(Context context,
- KeyguardViewCallback callback,
- KeyguardUpdateMonitor updateMonitor,
- KeyguardWindowController controller) {
- return new LockPatternKeyguardView(context, callback, updateMonitor,
- mLockPatternUtils, controller);
- }
-
- public boolean isSecure() {
- return mLockPatternUtils.isSecure() || isSimPinSecure();
- }
-
- private boolean isSimPinSecure() {
- final IccCardConstants.State simState = mUpdateMonitor.getSimState();
- return (simState == IccCardConstants.State.PIN_REQUIRED
- || simState == IccCardConstants.State.PUK_REQUIRED
- || simState == IccCardConstants.State.PERM_DISABLED);
- }
-
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockScreen.java
deleted file mode 100644
index 4e9a1f7..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/LockScreen.java
+++ /dev/null
@@ -1,619 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import com.android.internal.R;
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.SlidingTab;
-import com.android.internal.widget.WaveView;
-import com.android.internal.widget.multiwaveview.GlowPadView;
-
-import android.app.ActivityManager;
-import android.app.ActivityManagerNative;
-import android.app.SearchManager;
-import android.content.ActivityNotFoundException;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.UserHandle;
-import android.os.Vibrator;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.*;
-import android.util.Log;
-import android.util.Slog;
-import android.media.AudioManager;
-import android.os.RemoteException;
-import android.provider.MediaStore;
-
-import java.io.File;
-
-/**
- * The screen within {@link LockPatternKeyguardView} that shows general
- * information about the device depending on its state, and how to get
- * past it, as applicable.
- */
-class LockScreen extends LinearLayout implements KeyguardScreen {
-
- private static final int ON_RESUME_PING_DELAY = 500; // delay first ping until the screen is on
- private static final boolean DBG = false;
- private static final String TAG = "LockScreen";
- private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key";
- private static final int WAIT_FOR_ANIMATION_TIMEOUT = 0;
- private static final int STAY_ON_WHILE_GRABBED_TIMEOUT = 30000;
- private static final String ASSIST_ICON_METADATA_NAME =
- "com.android.systemui.action_assist_icon";
-
- private LockPatternUtils mLockPatternUtils;
- private KeyguardUpdateMonitor mUpdateMonitor;
- private KeyguardScreenCallback mCallback;
-
- // set to 'true' to show the ring/silence target when camera isn't available
- private boolean mEnableRingSilenceFallback = false;
-
- // current configuration state of keyboard and display
- private int mCreationOrientation;
-
- private boolean mSilentMode;
- private AudioManager mAudioManager;
- private boolean mEnableMenuKeyInLockScreen;
-
- private KeyguardStatusViewManager mStatusViewManager;
- private UnlockWidgetCommonMethods mUnlockWidgetMethods;
- private View mUnlockWidget;
- private boolean mCameraDisabled;
- private boolean mSearchDisabled;
- // Is there a vibrator
- private final boolean mHasVibrator;
-
- KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
-
- @Override
- public void onRingerModeChanged(int state) {
- boolean silent = AudioManager.RINGER_MODE_NORMAL != state;
- if (silent != mSilentMode) {
- mSilentMode = silent;
- mUnlockWidgetMethods.updateResources();
- }
- }
-
- @Override
- public void onDevicePolicyManagerStateChanged() {
- updateTargets();
- }
-
- @Override
- public void onSimStateChanged(IccCardConstants.State simState) {
- updateTargets();
- }
- };
-
- private interface UnlockWidgetCommonMethods {
- // Update resources based on phone state
- public void updateResources();
-
- // Get the view associated with this widget
- public View getView();
-
- // Reset the view
- public void reset(boolean animate);
-
- // Animate the widget if it supports ping()
- public void ping();
-
- // Enable or disable a target. ResourceId is the id of the *drawable* associated with the
- // target.
- public void setEnabled(int resourceId, boolean enabled);
-
- // Get the target position for the given resource. Returns -1 if not found.
- public int getTargetPosition(int resourceId);
-
- // Clean up when this widget is going away
- public void cleanUp();
- }
-
- class SlidingTabMethods implements SlidingTab.OnTriggerListener, UnlockWidgetCommonMethods {
- private final SlidingTab mSlidingTab;
-
- SlidingTabMethods(SlidingTab slidingTab) {
- mSlidingTab = slidingTab;
- }
-
- public void updateResources() {
- boolean vibe = mSilentMode
- && (mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE);
-
- mSlidingTab.setRightTabResources(
- mSilentMode ? ( vibe ? R.drawable.ic_jog_dial_vibrate_on
- : R.drawable.ic_jog_dial_sound_off )
- : R.drawable.ic_jog_dial_sound_on,
- mSilentMode ? R.drawable.jog_tab_target_yellow
- : R.drawable.jog_tab_target_gray,
- mSilentMode ? R.drawable.jog_tab_bar_right_sound_on
- : R.drawable.jog_tab_bar_right_sound_off,
- mSilentMode ? R.drawable.jog_tab_right_sound_on
- : R.drawable.jog_tab_right_sound_off);
- }
-
- /** {@inheritDoc} */
- public void onTrigger(View v, int whichHandle) {
- if (whichHandle == SlidingTab.OnTriggerListener.LEFT_HANDLE) {
- mCallback.goToUnlockScreen();
- } else if (whichHandle == SlidingTab.OnTriggerListener.RIGHT_HANDLE) {
- toggleRingMode();
- mCallback.pokeWakelock();
- }
- }
-
- /** {@inheritDoc} */
- public void onGrabbedStateChange(View v, int grabbedState) {
- if (grabbedState == SlidingTab.OnTriggerListener.RIGHT_HANDLE) {
- mSilentMode = isSilentMode();
- mSlidingTab.setRightHintText(mSilentMode ? R.string.lockscreen_sound_on_label
- : R.string.lockscreen_sound_off_label);
- }
- // Don't poke the wake lock when returning to a state where the handle is
- // not grabbed since that can happen when the system (instead of the user)
- // cancels the grab.
- if (grabbedState != SlidingTab.OnTriggerListener.NO_HANDLE) {
- mCallback.pokeWakelock();
- }
- }
-
- public View getView() {
- return mSlidingTab;
- }
-
- public void reset(boolean animate) {
- mSlidingTab.reset(animate);
- }
-
- public void ping() {
- }
-
- public void setEnabled(int resourceId, boolean enabled) {
- // Not used
- }
-
- public int getTargetPosition(int resourceId) {
- return -1; // Not supported
- }
-
- public void cleanUp() {
- mSlidingTab.setOnTriggerListener(null);
- }
- }
-
- class WaveViewMethods implements WaveView.OnTriggerListener, UnlockWidgetCommonMethods {
-
- private final WaveView mWaveView;
-
- WaveViewMethods(WaveView waveView) {
- mWaveView = waveView;
- }
- /** {@inheritDoc} */
- public void onTrigger(View v, int whichHandle) {
- if (whichHandle == WaveView.OnTriggerListener.CENTER_HANDLE) {
- requestUnlockScreen();
- }
- }
-
- /** {@inheritDoc} */
- public void onGrabbedStateChange(View v, int grabbedState) {
- // Don't poke the wake lock when returning to a state where the handle is
- // not grabbed since that can happen when the system (instead of the user)
- // cancels the grab.
- if (grabbedState == WaveView.OnTriggerListener.CENTER_HANDLE) {
- mCallback.pokeWakelock(STAY_ON_WHILE_GRABBED_TIMEOUT);
- }
- }
-
- public void updateResources() {
- }
-
- public View getView() {
- return mWaveView;
- }
- public void reset(boolean animate) {
- mWaveView.reset();
- }
- public void ping() {
- }
- public void setEnabled(int resourceId, boolean enabled) {
- // Not used
- }
- public int getTargetPosition(int resourceId) {
- return -1; // Not supported
- }
- public void cleanUp() {
- mWaveView.setOnTriggerListener(null);
- }
- }
-
- class GlowPadViewMethods implements GlowPadView.OnTriggerListener,
- UnlockWidgetCommonMethods {
- private final GlowPadView mGlowPadView;
-
- GlowPadViewMethods(GlowPadView glowPadView) {
- mGlowPadView = glowPadView;
- }
-
- public boolean isTargetPresent(int resId) {
- return mGlowPadView.getTargetPosition(resId) != -1;
- }
-
- public void updateResources() {
- int resId;
- if (mCameraDisabled && mEnableRingSilenceFallback) {
- // Fall back to showing ring/silence if camera is disabled...
- resId = mSilentMode ? R.array.lockscreen_targets_when_silent
- : R.array.lockscreen_targets_when_soundon;
- } else {
- resId = R.array.lockscreen_targets_with_camera;
- }
- if (mGlowPadView.getTargetResourceId() != resId) {
- mGlowPadView.setTargetResources(resId);
- }
-
- // Update the search icon with drawable from the search .apk
- if (!mSearchDisabled) {
- Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
- .getAssistIntent(mContext, UserHandle.USER_CURRENT);
- if (intent != null) {
- // XXX Hack. We need to substitute the icon here but haven't formalized
- // the public API. The "_google" metadata will be going away, so
- // DON'T USE IT!
- ComponentName component = intent.getComponent();
- boolean replaced = mGlowPadView.replaceTargetDrawablesIfPresent(component,
- ASSIST_ICON_METADATA_NAME + "_google",
- com.android.internal.R.drawable.ic_action_assist_generic);
-
- if (!replaced && !mGlowPadView.replaceTargetDrawablesIfPresent(component,
- ASSIST_ICON_METADATA_NAME,
- com.android.internal.R.drawable.ic_action_assist_generic)) {
- Slog.w(TAG, "Couldn't grab icon from package " + component);
- }
- }
- }
-
- setEnabled(com.android.internal.R.drawable.ic_lockscreen_camera, !mCameraDisabled);
- setEnabled(com.android.internal.R.drawable.ic_action_assist_generic, !mSearchDisabled);
- }
-
- public void onGrabbed(View v, int handle) {
-
- }
-
- public void onReleased(View v, int handle) {
-
- }
-
- public void onTrigger(View v, int target) {
- final int resId = mGlowPadView.getResourceIdForTarget(target);
- switch (resId) {
- case com.android.internal.R.drawable.ic_action_assist_generic:
- Intent assistIntent =
- ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
- .getAssistIntent(mContext, UserHandle.USER_CURRENT);
- if (assistIntent != null) {
- launchActivity(assistIntent);
- } else {
- Log.w(TAG, "Failed to get intent for assist activity");
- }
- mCallback.pokeWakelock();
- break;
-
- case com.android.internal.R.drawable.ic_lockscreen_camera:
- launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA));
- mCallback.pokeWakelock();
- break;
-
- case com.android.internal.R.drawable.ic_lockscreen_silent:
- toggleRingMode();
- mCallback.pokeWakelock();
- break;
-
- case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom:
- case com.android.internal.R.drawable.ic_lockscreen_unlock:
- mCallback.goToUnlockScreen();
- break;
- }
- }
-
- /**
- * Launches the said intent for the current foreground user.
- * @param intent
- */
- private void launchActivity(Intent intent) {
- intent.setFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_SINGLE_TOP
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- try {
- ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity();
- } catch (RemoteException e) {
- Log.w(TAG, "can't dismiss keyguard on launch");
- }
- try {
- mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
- } catch (ActivityNotFoundException e) {
- Log.w(TAG, "Activity not found for intent + " + intent.getAction());
- }
- }
-
- public void onGrabbedStateChange(View v, int handle) {
- // Don't poke the wake lock when returning to a state where the handle is
- // not grabbed since that can happen when the system (instead of the user)
- // cancels the grab.
- if (handle != GlowPadView.OnTriggerListener.NO_HANDLE) {
- mCallback.pokeWakelock();
- }
- }
-
- public View getView() {
- return mGlowPadView;
- }
-
- public void reset(boolean animate) {
- mGlowPadView.reset(animate);
- }
-
- public void ping() {
- mGlowPadView.ping();
- }
-
- public void setEnabled(int resourceId, boolean enabled) {
- mGlowPadView.setEnableTarget(resourceId, enabled);
- }
-
- public int getTargetPosition(int resourceId) {
- return mGlowPadView.getTargetPosition(resourceId);
- }
-
- public void cleanUp() {
- mGlowPadView.setOnTriggerListener(null);
- }
-
- public void onFinishFinalAnimation() {
-
- }
- }
-
- private void requestUnlockScreen() {
- // Delay hiding lock screen long enough for animation to finish
- postDelayed(new Runnable() {
- public void run() {
- mCallback.goToUnlockScreen();
- }
- }, WAIT_FOR_ANIMATION_TIMEOUT);
- }
-
- private void toggleRingMode() {
- // toggle silent mode
- mSilentMode = !mSilentMode;
- if (mSilentMode) {
- mAudioManager.setRingerMode(mHasVibrator
- ? AudioManager.RINGER_MODE_VIBRATE
- : AudioManager.RINGER_MODE_SILENT);
- } else {
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- }
- }
-
- /**
- * In general, we enable unlocking the insecure key guard with the menu key. However, there are
- * some cases where we wish to disable it, notably when the menu button placement or technology
- * is prone to false positives.
- *
- * @return true if the menu key should be enabled
- */
- private boolean shouldEnableMenuKey() {
- final Resources res = getResources();
- final boolean configDisabled = res.getBoolean(R.bool.config_disableMenuKeyInLockScreen);
- final boolean isTestHarness = ActivityManager.isRunningInTestHarness();
- final boolean fileOverride = (new File(ENABLE_MENU_KEY_FILE)).exists();
- return !configDisabled || isTestHarness || fileOverride;
- }
-
- /**
- * @param context Used to setup the view.
- * @param configuration The current configuration. Used to use when selecting layout, etc.
- * @param lockPatternUtils Used to know the state of the lock pattern settings.
- * @param updateMonitor Used to register for updates on various keyguard related
- * state, and query the initial state at setup.
- * @param callback Used to communicate back to the host keyguard view.
- */
- LockScreen(Context context, Configuration configuration, LockPatternUtils lockPatternUtils,
- KeyguardUpdateMonitor updateMonitor,
- KeyguardScreenCallback callback) {
- super(context);
- mLockPatternUtils = lockPatternUtils;
- mUpdateMonitor = updateMonitor;
- mCallback = callback;
- mEnableMenuKeyInLockScreen = shouldEnableMenuKey();
- mCreationOrientation = configuration.orientation;
-
- if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
- Log.v(TAG, "***** CREATING LOCK SCREEN", new RuntimeException());
- Log.v(TAG, "Cur orient=" + mCreationOrientation
- + " res orient=" + context.getResources().getConfiguration().orientation);
- }
-
- final LayoutInflater inflater = LayoutInflater.from(context);
- if (DBG) Log.v(TAG, "Creation orientation = " + mCreationOrientation);
- if (mCreationOrientation != Configuration.ORIENTATION_LANDSCAPE) {
- inflater.inflate(R.layout.keyguard_screen_tab_unlock, this, true);
- } else {
- inflater.inflate(R.layout.keyguard_screen_tab_unlock_land, this, true);
- }
-
- mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback, false);
-
- setFocusable(true);
- setFocusableInTouchMode(true);
- setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
-
- Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
- mHasVibrator = vibrator == null ? false : vibrator.hasVibrator();
- mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
- mSilentMode = isSilentMode();
- mUnlockWidget = findViewById(R.id.unlock_widget);
- mUnlockWidgetMethods = createUnlockMethods(mUnlockWidget);
-
- if (DBG) Log.v(TAG, "*** LockScreen accel is "
- + (mUnlockWidget.isHardwareAccelerated() ? "on":"off"));
- }
-
- private UnlockWidgetCommonMethods createUnlockMethods(View unlockWidget) {
- if (unlockWidget instanceof SlidingTab) {
- SlidingTab slidingTabView = (SlidingTab) unlockWidget;
- slidingTabView.setHoldAfterTrigger(true, false);
- slidingTabView.setLeftHintText(R.string.lockscreen_unlock_label);
- slidingTabView.setLeftTabResources(
- R.drawable.ic_jog_dial_unlock,
- R.drawable.jog_tab_target_green,
- R.drawable.jog_tab_bar_left_unlock,
- R.drawable.jog_tab_left_unlock);
- SlidingTabMethods slidingTabMethods = new SlidingTabMethods(slidingTabView);
- slidingTabView.setOnTriggerListener(slidingTabMethods);
- return slidingTabMethods;
- } else if (unlockWidget instanceof WaveView) {
- WaveView waveView = (WaveView) unlockWidget;
- WaveViewMethods waveViewMethods = new WaveViewMethods(waveView);
- waveView.setOnTriggerListener(waveViewMethods);
- return waveViewMethods;
- } else if (unlockWidget instanceof GlowPadView) {
- GlowPadView glowPadView = (GlowPadView) unlockWidget;
- GlowPadViewMethods glowPadViewMethods = new GlowPadViewMethods(glowPadView);
- glowPadView.setOnTriggerListener(glowPadViewMethods);
- return glowPadViewMethods;
- } else {
- throw new IllegalStateException("Unrecognized unlock widget: " + unlockWidget);
- }
- }
-
- private void updateTargets() {
- boolean disabledByAdmin = mLockPatternUtils.getDevicePolicyManager()
- .getCameraDisabled(null);
- boolean disabledBySimState = mUpdateMonitor.isSimLocked();
- boolean cameraTargetPresent = (mUnlockWidgetMethods instanceof GlowPadViewMethods)
- ? ((GlowPadViewMethods) mUnlockWidgetMethods)
- .isTargetPresent(com.android.internal.R.drawable.ic_lockscreen_camera)
- : false;
- boolean searchTargetPresent = (mUnlockWidgetMethods instanceof GlowPadViewMethods)
- ? ((GlowPadViewMethods) mUnlockWidgetMethods)
- .isTargetPresent(com.android.internal.R.drawable.ic_action_assist_generic)
- : false;
-
- if (disabledByAdmin) {
- Log.v(TAG, "Camera disabled by Device Policy");
- } else if (disabledBySimState) {
- Log.v(TAG, "Camera disabled by Sim State");
- }
- boolean searchActionAvailable =
- ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
- .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
- mCameraDisabled = disabledByAdmin || disabledBySimState || !cameraTargetPresent;
- mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent;
- mUnlockWidgetMethods.updateResources();
- }
-
- private boolean isSilentMode() {
- return mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_MENU && mEnableMenuKeyInLockScreen) {
- mCallback.goToUnlockScreen();
- }
- return false;
- }
-
- void updateConfiguration() {
- Configuration newConfig = getResources().getConfiguration();
- if (newConfig.orientation != mCreationOrientation) {
- mCallback.recreateMe(newConfig);
- }
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
- Log.v(TAG, "***** LOCK ATTACHED TO WINDOW");
- Log.v(TAG, "Cur orient=" + mCreationOrientation
- + ", new config=" + getResources().getConfiguration());
- }
- updateConfiguration();
- }
-
- /** {@inheritDoc} */
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
- Log.w(TAG, "***** LOCK CONFIG CHANGING", new RuntimeException());
- Log.v(TAG, "Cur orient=" + mCreationOrientation
- + ", new config=" + newConfig);
- }
- updateConfiguration();
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return false;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mUpdateMonitor.removeCallback(mInfoCallback);
- mStatusViewManager.onPause();
- mUnlockWidgetMethods.reset(false);
- }
-
- private final Runnable mOnResumePing = new Runnable() {
- public void run() {
- mUnlockWidgetMethods.ping();
- }
- };
-
- /** {@inheritDoc} */
- public void onResume() {
- // We don't want to show the camera target if SIM state prevents us from
- // launching the camera. So watch for SIM changes...
- mUpdateMonitor.registerCallback(mInfoCallback);
-
- mStatusViewManager.onResume();
- postDelayed(mOnResumePing, ON_RESUME_PING_DELAY);
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- mUpdateMonitor.removeCallback(mInfoCallback); // this must be first
- mUnlockWidgetMethods.cleanUp();
- mLockPatternUtils = null;
- mUpdateMonitor = null;
- mCallback = null;
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PasswordUnlockScreen.java
deleted file mode 100644
index 87a7371..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PasswordUnlockScreen.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import java.util.List;
-
-import android.app.admin.DevicePolicyManager;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.PasswordEntryKeyboardView;
-
-import android.os.CountDownTimer;
-import android.os.SystemClock;
-import android.provider.Settings;
-import android.security.KeyStore;
-import android.text.Editable;
-import android.text.InputType;
-import android.text.TextWatcher;
-import android.text.method.DigitsKeyListener;
-import android.text.method.TextKeyListener;
-import android.view.Gravity;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup.LayoutParams;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.view.inputmethod.InputMethodSubtype;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.Space;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import com.android.internal.R;
-import com.android.internal.widget.PasswordEntryKeyboardHelper;
-
-/**
- * Displays a dialer-like interface or alphanumeric (latin-1) key entry for the user to enter
- * an unlock password
- */
-public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen,
- OnEditorActionListener {
-
- private static final String TAG = "PasswordUnlockScreen";
- private final KeyguardUpdateMonitor mUpdateMonitor;
- private final KeyguardScreenCallback mCallback;
-
- private final boolean mIsAlpha;
-
- private final EditText mPasswordEntry;
- private final LockPatternUtils mLockPatternUtils;
- private final PasswordEntryKeyboardView mKeyboardView;
- private final PasswordEntryKeyboardHelper mKeyboardHelper;
-
- private final int mCreationOrientation;
- private final int mCreationHardKeyboardHidden;
-
- private final KeyguardStatusViewManager mStatusViewManager;
- private final boolean mUseSystemIME = true; // TODO: Make configurable
- private boolean mResuming; // used to prevent poking the wakelock during onResume()
-
- // To avoid accidental lockout due to events while the device in in the pocket, ignore
- // any passwords with length less than or equal to this length.
- private static final int MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT = 3;
-
- public PasswordUnlockScreen(Context context, Configuration configuration,
- LockPatternUtils lockPatternUtils, KeyguardUpdateMonitor updateMonitor,
- KeyguardScreenCallback callback) {
- super(context);
-
- mCreationHardKeyboardHidden = configuration.hardKeyboardHidden;
- mCreationOrientation = configuration.orientation;
- mUpdateMonitor = updateMonitor;
- mCallback = callback;
- mLockPatternUtils = lockPatternUtils;
-
- LayoutInflater layoutInflater = LayoutInflater.from(context);
- if (mCreationOrientation != Configuration.ORIENTATION_LANDSCAPE) {
- layoutInflater.inflate(R.layout.keyguard_screen_password_portrait, this, true);
- } else {
- layoutInflater.inflate(R.layout.keyguard_screen_password_landscape, this, true);
- }
-
- mStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor, mLockPatternUtils,
- mCallback, true);
-
- final int quality = lockPatternUtils.getKeyguardStoredPasswordQuality();
- mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == quality
- || DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == quality
- || DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == quality;
-
- mKeyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard);
- mPasswordEntry = (EditText) findViewById(R.id.passwordEntry);
- mPasswordEntry.setOnEditorActionListener(this);
-
- mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this, false);
- mKeyboardHelper.setEnableHaptics(mLockPatternUtils.isTactileFeedbackEnabled());
- boolean imeOrDeleteButtonVisible = false;
- if (mIsAlpha) {
- // We always use the system IME for alpha keyboard, so hide lockscreen's soft keyboard
- mKeyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA);
- mKeyboardView.setVisibility(View.GONE);
- } else {
- // Use lockscreen's numeric keyboard if the physical keyboard isn't showing
- mKeyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC);
- mKeyboardView.setVisibility(mCreationHardKeyboardHidden
- == Configuration.HARDKEYBOARDHIDDEN_NO ? View.INVISIBLE : View.VISIBLE);
-
- // The delete button is of the PIN keyboard itself in some (e.g. tablet) layouts,
- // not a separate view
- View pinDelete = findViewById(R.id.pinDel);
- if (pinDelete != null) {
- pinDelete.setVisibility(View.VISIBLE);
- imeOrDeleteButtonVisible = true;
- pinDelete.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- mKeyboardHelper.handleBackspace();
- }
- });
- }
- }
-
- mPasswordEntry.requestFocus();
-
- // This allows keyboards with overlapping qwerty/numeric keys to choose just numeric keys.
- if (mIsAlpha) {
- mPasswordEntry.setKeyListener(TextKeyListener.getInstance());
- mPasswordEntry.setInputType(InputType.TYPE_CLASS_TEXT
- | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- //mStatusViewManager.setHelpMessage(R.string.keyguard_password_enter_password_code,
- //KeyguardStatusViewManager.LOCK_ICON);
- } else {
- mPasswordEntry.setKeyListener(DigitsKeyListener.getInstance());
- mPasswordEntry.setInputType(InputType.TYPE_CLASS_NUMBER
- | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
- //mStatusViewManager.setHelpMessage(R.string.keyguard_password_enter_pin_code,
- //KeyguardStatusViewManager.LOCK_ICON);
- }
-
- // Poke the wakelock any time the text is selected or modified
- mPasswordEntry.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- mCallback.pokeWakelock();
- }
- });
- mPasswordEntry.addTextChangedListener(new TextWatcher() {
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- }
-
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
- }
-
- public void afterTextChanged(Editable s) {
- if (!mResuming) {
- mCallback.pokeWakelock();
- }
- }
- });
-
- // If there's more than one IME, enable the IME switcher button
- View switchImeButton = findViewById(R.id.switch_ime_button);
- final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(
- Context.INPUT_METHOD_SERVICE);
- if (mIsAlpha && switchImeButton != null && hasMultipleEnabledIMEsOrSubtypes(imm, false)) {
- switchImeButton.setVisibility(View.VISIBLE);
- imeOrDeleteButtonVisible = true;
- switchImeButton.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- mCallback.pokeWakelock(); // Leave the screen on a bit longer
- imm.showInputMethodPicker();
- }
- });
- }
-
- // If no icon is visible, reset the left margin on the password field so the text is
- // still centered.
- if (!imeOrDeleteButtonVisible) {
- android.view.ViewGroup.LayoutParams params = mPasswordEntry.getLayoutParams();
- if (params instanceof MarginLayoutParams) {
- ((MarginLayoutParams)params).leftMargin = 0;
- mPasswordEntry.setLayoutParams(params);
- }
- }
- }
-
- /**
- * Method adapted from com.android.inputmethod.latin.Utils
- *
- * @param imm The input method manager
- * @param shouldIncludeAuxiliarySubtypes
- * @return true if we have multiple IMEs to choose from
- */
- private boolean hasMultipleEnabledIMEsOrSubtypes(InputMethodManager imm,
- final boolean shouldIncludeAuxiliarySubtypes) {
- final List<InputMethodInfo> enabledImis = imm.getEnabledInputMethodList();
-
- // Number of the filtered IMEs
- int filteredImisCount = 0;
-
- for (InputMethodInfo imi : enabledImis) {
- // We can return true immediately after we find two or more filtered IMEs.
- if (filteredImisCount > 1) return true;
- final List<InputMethodSubtype> subtypes =
- imm.getEnabledInputMethodSubtypeList(imi, true);
- // IMEs that have no subtypes should be counted.
- if (subtypes.isEmpty()) {
- ++filteredImisCount;
- continue;
- }
-
- int auxCount = 0;
- for (InputMethodSubtype subtype : subtypes) {
- if (subtype.isAuxiliary()) {
- ++auxCount;
- }
- }
- final int nonAuxCount = subtypes.size() - auxCount;
-
- // IMEs that have one or more non-auxiliary subtypes should be counted.
- // If shouldIncludeAuxiliarySubtypes is true, IMEs that have two or more auxiliary
- // subtypes should be counted as well.
- if (nonAuxCount > 0 || (shouldIncludeAuxiliarySubtypes && auxCount > 1)) {
- ++filteredImisCount;
- continue;
- }
- }
-
- return filteredImisCount > 1
- // imm.getEnabledInputMethodSubtypeList(null, false) will return the current IME's enabled
- // input method subtype (The current IME should be LatinIME.)
- || imm.getEnabledInputMethodSubtypeList(null, false).size() > 1;
- }
-
- @Override
- protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
- // send focus to the password field
- return mPasswordEntry.requestFocus(direction, previouslyFocusedRect);
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return mUseSystemIME && mIsAlpha;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mStatusViewManager.onPause();
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- mResuming = true;
- // reset status
- mStatusViewManager.onResume();
-
- // start fresh
- mPasswordEntry.setText("");
- mPasswordEntry.requestFocus();
-
- // if the user is currently locked out, enforce it.
- long deadline = mLockPatternUtils.getLockoutAttemptDeadline();
- if (deadline != 0) {
- handleAttemptLockout(deadline);
- }
- mResuming = false;
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- mUpdateMonitor.removeCallback(this);
- }
-
- private void verifyPasswordAndUnlock() {
- String entry = mPasswordEntry.getText().toString();
- if (mLockPatternUtils.checkPassword(entry)) {
- mCallback.keyguardDone(true);
- mCallback.reportSuccessfulUnlockAttempt();
- mStatusViewManager.setInstructionText(null);
- KeyStore.getInstance().password(entry);
- } else if (entry.length() > MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT ) {
- // to avoid accidental lockout, only count attempts that are long enough to be a
- // real password. This may require some tweaking.
- mCallback.reportFailedUnlockAttempt();
- if (0 == (mUpdateMonitor.getFailedAttempts()
- % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
- long deadline = mLockPatternUtils.setLockoutAttemptDeadline();
- handleAttemptLockout(deadline);
- }
- mStatusViewManager.setInstructionText(
- mContext.getString(R.string.lockscreen_password_wrong));
- } else if (entry.length() > 0) {
- mStatusViewManager.setInstructionText(
- mContext.getString(R.string.lockscreen_password_wrong));
- }
- mPasswordEntry.setText("");
- }
-
- // Prevent user from using the PIN/Password entry until scheduled deadline.
- private void handleAttemptLockout(long elapsedRealtimeDeadline) {
- mPasswordEntry.setEnabled(false);
- mKeyboardView.setEnabled(false);
- long elapsedRealtime = SystemClock.elapsedRealtime();
- new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) {
-
- @Override
- public void onTick(long millisUntilFinished) {
- int secondsRemaining = (int) (millisUntilFinished / 1000);
- String instructions = getContext().getString(
- R.string.lockscreen_too_many_failed_attempts_countdown,
- secondsRemaining);
- mStatusViewManager.setInstructionText(instructions);
- }
-
- @Override
- public void onFinish() {
- mPasswordEntry.setEnabled(true);
- mKeyboardView.setEnabled(true);
- mStatusViewManager.resetStatusInfo();
- }
- }.start();
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- mCallback.pokeWakelock();
- return false;
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- Configuration config = getResources().getConfiguration();
- if (config.orientation != mCreationOrientation
- || config.hardKeyboardHidden != mCreationHardKeyboardHidden) {
- mCallback.recreateMe(config);
- }
- }
-
- /** {@inheritDoc} */
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (newConfig.orientation != mCreationOrientation
- || newConfig.hardKeyboardHidden != mCreationHardKeyboardHidden) {
- mCallback.recreateMe(newConfig);
- }
- }
-
- public void onKeyboardChange(boolean isKeyboardOpen) {
- // Don't show the soft keyboard when the real keyboard is open
- mKeyboardView.setVisibility(isKeyboardOpen ? View.INVISIBLE : View.VISIBLE);
- }
-
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- // Check if this was the result of hitting the enter key
- if (actionId == EditorInfo.IME_NULL || actionId == EditorInfo.IME_ACTION_DONE
- || actionId == EditorInfo.IME_ACTION_NEXT) {
- verifyPasswordAndUnlock();
- return true;
- }
- return false;
- }
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PatternUnlockScreen.java
deleted file mode 100644
index 6d5706b..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/PatternUnlockScreen.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.CountDownTimer;
-import android.os.SystemClock;
-import android.security.KeyStore;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.MotionEvent;
-import android.widget.Button;
-import android.util.Log;
-import com.android.internal.R;
-import com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient;
-import com.android.internal.widget.LockPatternUtils;
-import com.android.internal.widget.LockPatternView;
-import com.android.internal.widget.LockPatternView.Cell;
-
-import java.util.List;
-
-/**
- * This is the screen that shows the 9 circle unlock widget and instructs
- * the user how to unlock their device, or make an emergency call.
- */
-class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient
- implements KeyguardScreen {
-
- private static final boolean DEBUG = false;
- private static final String TAG = "UnlockScreen";
-
- // how long before we clear the wrong pattern
- private static final int PATTERN_CLEAR_TIMEOUT_MS = 2000;
-
- // how long we stay awake after each key beyond MIN_PATTERN_BEFORE_POKE_WAKELOCK
- private static final int UNLOCK_PATTERN_WAKE_INTERVAL_MS = 7000;
-
- // how long we stay awake after the user hits the first dot.
- private static final int UNLOCK_PATTERN_WAKE_INTERVAL_FIRST_DOTS_MS = 2000;
-
- // how many cells the user has to cross before we poke the wakelock
- private static final int MIN_PATTERN_BEFORE_POKE_WAKELOCK = 2;
-
- private int mFailedPatternAttemptsSinceLastTimeout = 0;
- private int mTotalFailedPatternAttempts = 0;
- private CountDownTimer mCountdownTimer = null;
-
- private LockPatternUtils mLockPatternUtils;
- private KeyguardUpdateMonitor mUpdateMonitor;
- private KeyguardScreenCallback mCallback;
-
- /**
- * whether there is a fallback option available when the pattern is forgotten.
- */
- private boolean mEnableFallback;
-
- private KeyguardStatusViewManager mKeyguardStatusViewManager;
- private LockPatternView mLockPatternView;
-
- /**
- * Keeps track of the last time we poked the wake lock during dispatching
- * of the touch event, initalized to something gauranteed to make us
- * poke it when the user starts drawing the pattern.
- * @see #dispatchTouchEvent(android.view.MotionEvent)
- */
- private long mLastPokeTime = -UNLOCK_PATTERN_WAKE_INTERVAL_MS;
-
- /**
- * Useful for clearing out the wrong pattern after a delay
- */
- private Runnable mCancelPatternRunnable = new Runnable() {
- public void run() {
- mLockPatternView.clearPattern();
- }
- };
-
- private final OnClickListener mForgotPatternClick = new OnClickListener() {
- public void onClick(View v) {
- mCallback.forgotPattern(true);
- }
- };
-
- private Button mForgotPatternButton;
- private int mCreationOrientation;
-
- enum FooterMode {
- Normal,
- ForgotLockPattern,
- VerifyUnlocked
- }
-
- private void hideForgotPatternButton() {
- mForgotPatternButton.setVisibility(View.GONE);
- }
-
- private void showForgotPatternButton() {
- mForgotPatternButton.setVisibility(View.VISIBLE);
- }
-
- private void updateFooter(FooterMode mode) {
- switch (mode) {
- case Normal:
- if (DEBUG) Log.d(TAG, "mode normal");
- hideForgotPatternButton();
- break;
- case ForgotLockPattern:
- if (DEBUG) Log.d(TAG, "mode ForgotLockPattern");
- showForgotPatternButton();
- break;
- case VerifyUnlocked:
- if (DEBUG) Log.d(TAG, "mode VerifyUnlocked");
- hideForgotPatternButton();
- }
- }
-
- /**
- * @param context The context.
- * @param configuration
- * @param lockPatternUtils Used to lookup lock pattern settings.
- * @param updateMonitor Used to lookup state affecting keyguard.
- * @param callback Used to notify the manager when we're done, etc.
- * @param totalFailedAttempts The current number of failed attempts.
- * @param enableFallback True if a backup unlock option is available when the user has forgotten
- * their pattern (e.g they have a google account so we can show them the account based
- * backup option).
- */
- PatternUnlockScreen(Context context,
- Configuration configuration, LockPatternUtils lockPatternUtils,
- KeyguardUpdateMonitor updateMonitor,
- KeyguardScreenCallback callback,
- int totalFailedAttempts) {
- super(context);
- mLockPatternUtils = lockPatternUtils;
- mUpdateMonitor = updateMonitor;
- mCallback = callback;
- mTotalFailedPatternAttempts = totalFailedAttempts;
- mFailedPatternAttemptsSinceLastTimeout =
- totalFailedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
-
- if (DEBUG) Log.d(TAG,
- "UnlockScreen() ctor: totalFailedAttempts="
- + totalFailedAttempts + ", mFailedPat...="
- + mFailedPatternAttemptsSinceLastTimeout
- );
-
- mCreationOrientation = configuration.orientation;
-
- LayoutInflater inflater = LayoutInflater.from(context);
-
- if (mCreationOrientation != Configuration.ORIENTATION_LANDSCAPE) {
- Log.d(TAG, "portrait mode");
- inflater.inflate(R.layout.keyguard_screen_unlock_portrait, this, true);
- } else {
- Log.d(TAG, "landscape mode");
- inflater.inflate(R.layout.keyguard_screen_unlock_landscape, this, true);
- }
-
- mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, mUpdateMonitor,
- mLockPatternUtils, mCallback, true);
-
- mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern);
-
- mForgotPatternButton = (Button) findViewById(R.id.forgotPatternButton);
- mForgotPatternButton.setText(R.string.lockscreen_forgot_pattern_button_text);
- mForgotPatternButton.setOnClickListener(mForgotPatternClick);
-
- // make it so unhandled touch events within the unlock screen go to the
- // lock pattern view.
- setDefaultTouchRecepient(mLockPatternView);
-
- mLockPatternView.setSaveEnabled(false);
- mLockPatternView.setFocusable(false);
- mLockPatternView.setOnPatternListener(new UnlockPatternListener());
-
- // stealth mode will be the same for the life of this screen
- mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled());
-
- // vibrate mode will be the same for the life of this screen
- mLockPatternView.setTactileFeedbackEnabled(mLockPatternUtils.isTactileFeedbackEnabled());
-
- // assume normal footer mode for now
- updateFooter(FooterMode.Normal);
-
- setFocusableInTouchMode(true);
- }
-
- public void setEnableFallback(boolean state) {
- if (DEBUG) Log.d(TAG, "setEnableFallback(" + state + ")");
- mEnableFallback = state;
- }
-
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- // as long as the user is entering a pattern (i.e sending a touch
- // event that was handled by this screen), keep poking the
- // wake lock so that the screen will stay on.
- final boolean result = super.dispatchTouchEvent(ev);
- if (result &&
- ((SystemClock.elapsedRealtime() - mLastPokeTime)
- > (UNLOCK_PATTERN_WAKE_INTERVAL_MS - 100))) {
- mLastPokeTime = SystemClock.elapsedRealtime();
- }
- return result;
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
- Log.v(TAG, "***** PATTERN ATTACHED TO WINDOW");
- Log.v(TAG, "Cur orient=" + mCreationOrientation
- + ", new config=" + getResources().getConfiguration());
- }
- if (getResources().getConfiguration().orientation != mCreationOrientation) {
- mCallback.recreateMe(getResources().getConfiguration());
- }
- }
-
-
- /** {@inheritDoc} */
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
- Log.v(TAG, "***** PATTERN CONFIGURATION CHANGED");
- Log.v(TAG, "Cur orient=" + mCreationOrientation
- + ", new config=" + getResources().getConfiguration());
- }
- if (newConfig.orientation != mCreationOrientation) {
- mCallback.recreateMe(newConfig);
- }
- }
-
- /** {@inheritDoc} */
- public void onKeyboardChange(boolean isKeyboardOpen) {}
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return false;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- if (mCountdownTimer != null) {
- mCountdownTimer.cancel();
- mCountdownTimer = null;
- }
- mKeyguardStatusViewManager.onPause();
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- // reset status
- mKeyguardStatusViewManager.onResume();
-
- // reset lock pattern
- mLockPatternView.enableInput();
- mLockPatternView.setEnabled(true);
- mLockPatternView.clearPattern();
-
- // show "forgot pattern?" button if we have an alternate authentication method
- if (mCallback.doesFallbackUnlockScreenExist()) {
- showForgotPatternButton();
- } else {
- hideForgotPatternButton();
- }
-
- // if the user is currently locked out, enforce it.
- long deadline = mLockPatternUtils.getLockoutAttemptDeadline();
- if (deadline != 0) {
- handleAttemptLockout(deadline);
- }
-
- // the footer depends on how many total attempts the user has failed
- if (mCallback.isVerifyUnlockOnly()) {
- updateFooter(FooterMode.VerifyUnlocked);
- } else if (mEnableFallback &&
- (mTotalFailedPatternAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
- updateFooter(FooterMode.ForgotLockPattern);
- } else {
- updateFooter(FooterMode.Normal);
- }
-
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- if (DEBUG) Log.v(TAG, "Cleanup() called on " + this);
- mUpdateMonitor.removeCallback(this);
- mLockPatternUtils = null;
- mUpdateMonitor = null;
- mCallback = null;
- mLockPatternView.setOnPatternListener(null);
- }
-
- @Override
- public void onWindowFocusChanged(boolean hasWindowFocus) {
- super.onWindowFocusChanged(hasWindowFocus);
- if (hasWindowFocus) {
- // when timeout dialog closes we want to update our state
- onResume();
- }
- }
-
- private class UnlockPatternListener
- implements LockPatternView.OnPatternListener {
-
- public void onPatternStart() {
- mLockPatternView.removeCallbacks(mCancelPatternRunnable);
- }
-
- public void onPatternCleared() {
- }
-
- public void onPatternCellAdded(List<Cell> pattern) {
- // To guard against accidental poking of the wakelock, look for
- // the user actually trying to draw a pattern of some minimal length.
- if (pattern.size() > MIN_PATTERN_BEFORE_POKE_WAKELOCK) {
- mCallback.pokeWakelock(UNLOCK_PATTERN_WAKE_INTERVAL_MS);
- } else {
- // Give just a little extra time if they hit one of the first few dots
- mCallback.pokeWakelock(UNLOCK_PATTERN_WAKE_INTERVAL_FIRST_DOTS_MS);
- }
- }
-
- public void onPatternDetected(List<LockPatternView.Cell> pattern) {
- if (mLockPatternUtils.checkPattern(pattern)) {
- mLockPatternView
- .setDisplayMode(LockPatternView.DisplayMode.Correct);
- mKeyguardStatusViewManager.setInstructionText("");
- mKeyguardStatusViewManager.updateStatusLines(true);
- mCallback.keyguardDone(true);
- mCallback.reportSuccessfulUnlockAttempt();
- KeyStore.getInstance().password(LockPatternUtils.patternToString(pattern));
- } else {
- boolean reportFailedAttempt = false;
- if (pattern.size() > MIN_PATTERN_BEFORE_POKE_WAKELOCK) {
- mCallback.pokeWakelock(UNLOCK_PATTERN_WAKE_INTERVAL_MS);
- }
- mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Wrong);
- if (pattern.size() >= LockPatternUtils.MIN_PATTERN_REGISTER_FAIL) {
- mTotalFailedPatternAttempts++;
- mFailedPatternAttemptsSinceLastTimeout++;
- reportFailedAttempt = true;
- }
- if (mFailedPatternAttemptsSinceLastTimeout
- >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) {
- long deadline = mLockPatternUtils.setLockoutAttemptDeadline();
- handleAttemptLockout(deadline);
- } else {
- // TODO mUnlockIcon.setVisibility(View.VISIBLE);
- mKeyguardStatusViewManager.setInstructionText(
- getContext().getString(R.string.lockscreen_pattern_wrong));
- mKeyguardStatusViewManager.updateStatusLines(true);
- mLockPatternView.postDelayed(
- mCancelPatternRunnable,
- PATTERN_CLEAR_TIMEOUT_MS);
- }
-
- // Because the following can result in cleanUp() being called on this screen,
- // member variables reset in cleanUp() shouldn't be accessed after this call.
- if (reportFailedAttempt) {
- mCallback.reportFailedUnlockAttempt();
- }
- }
- }
- }
-
- private void handleAttemptLockout(long elapsedRealtimeDeadline) {
- mLockPatternView.clearPattern();
- mLockPatternView.setEnabled(false);
- long elapsedRealtime = SystemClock.elapsedRealtime();
- mCountdownTimer = new CountDownTimer(elapsedRealtimeDeadline - elapsedRealtime, 1000) {
-
- @Override
- public void onTick(long millisUntilFinished) {
- int secondsRemaining = (int) (millisUntilFinished / 1000);
- mKeyguardStatusViewManager.setInstructionText(getContext().getString(
- R.string.lockscreen_too_many_failed_attempts_countdown,
- secondsRemaining));
- mKeyguardStatusViewManager.updateStatusLines(true);
- }
-
- @Override
- public void onFinish() {
- mLockPatternView.setEnabled(true);
- mKeyguardStatusViewManager.setInstructionText(getContext().getString(
- R.string.lockscreen_pattern_instructions));
- mKeyguardStatusViewManager.updateStatusLines(true);
- // TODO mUnlockIcon.setVisibility(View.VISIBLE);
- mFailedPatternAttemptsSinceLastTimeout = 0;
- if (mEnableFallback) {
- updateFooter(FooterMode.ForgotLockPattern);
- } else {
- updateFooter(FooterMode.Normal);
- }
- }
- }.start();
- }
-
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimPukUnlockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimPukUnlockScreen.java
deleted file mode 100644
index 3c1703a..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimPukUnlockScreen.java
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-
-import com.android.internal.telephony.ITelephony;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.text.Editable;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import com.android.internal.R;
-
-/**
- * Displays a dialer like interface to unlock the SIM PUK.
- */
-public class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen,
- View.OnClickListener, View.OnFocusChangeListener {
-
- private static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
-
- private final KeyguardUpdateMonitor mUpdateMonitor;
- private final KeyguardScreenCallback mCallback;
- private KeyguardStatusViewManager mKeyguardStatusViewManager;
-
- private TextView mHeaderText;
- private TextView mPukText;
- private TextView mPinText;
- private TextView mFocusedEntry;
-
- private View mOkButton;
- private View mDelPukButton;
- private View mDelPinButton;
-
- private ProgressDialog mSimUnlockProgressDialog = null;
-
- private LockPatternUtils mLockPatternUtils;
-
- private int mCreationOrientation;
-
- private int mKeyboardHidden;
-
- private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
-
- public SimPukUnlockScreen(Context context, Configuration configuration,
- KeyguardUpdateMonitor updateMonitor, KeyguardScreenCallback callback,
- LockPatternUtils lockpatternutils) {
- super(context);
- mUpdateMonitor = updateMonitor;
- mCallback = callback;;
-
- mCreationOrientation = configuration.orientation;
- mKeyboardHidden = configuration.hardKeyboardHidden;
- mLockPatternUtils = lockpatternutils;
-
- LayoutInflater inflater = LayoutInflater.from(context);
- if (mKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
- inflater.inflate(
- R.layout.keyguard_screen_sim_puk_landscape, this, true);
- } else {
- inflater.inflate(
- R.layout.keyguard_screen_sim_puk_portrait, this, true);
- new TouchInput();
- }
-
- mHeaderText = (TextView) findViewById(R.id.headerText);
-
- mPukText = (TextView) findViewById(R.id.pukDisplay);
- mPinText = (TextView) findViewById(R.id.pinDisplay);
- mDelPukButton = findViewById(R.id.pukDel);
- mDelPinButton = findViewById(R.id.pinDel);
- mOkButton = findViewById(R.id.ok);
-
- mDelPinButton.setOnClickListener(this);
- mDelPukButton.setOnClickListener(this);
- mOkButton.setOnClickListener(this);
-
- mHeaderText.setText(R.string.keyguard_password_enter_puk_code);
- // To make marquee work
- mHeaderText.setSelected(true);
-
- mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback, true);
-
- mPinText.setFocusableInTouchMode(true);
- mPinText.setOnFocusChangeListener(this);
- mPukText.setFocusableInTouchMode(true);
- mPukText.setOnFocusChangeListener(this);
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return false;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mKeyguardStatusViewManager.onPause();
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- // start fresh
- mHeaderText.setText(R.string.keyguard_password_enter_puk_code);
- mKeyguardStatusViewManager.onResume();
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- // dismiss the dialog.
- if (mSimUnlockProgressDialog != null) {
- mSimUnlockProgressDialog.dismiss();
- mSimUnlockProgressDialog = null;
- }
- mUpdateMonitor.removeCallback(this);
- }
-
-
- /**
- * Since the IPC can block, we want to run the request in a separate thread
- * with a callback.
- */
- private abstract class CheckSimPuk extends Thread {
-
- private final String mPin, mPuk;
-
- protected CheckSimPuk(String puk, String pin) {
- mPuk = puk;
- mPin = pin;
- }
-
- abstract void onSimLockChangedResponse(boolean success);
-
- @Override
- public void run() {
- try {
- final boolean result = ITelephony.Stub.asInterface(ServiceManager
- .checkService("phone")).supplyPuk(mPuk, mPin);
-
- post(new Runnable() {
- public void run() {
- onSimLockChangedResponse(result);
- }
- });
- } catch (RemoteException e) {
- post(new Runnable() {
- public void run() {
- onSimLockChangedResponse(false);
- }
- });
- }
- }
- }
-
- public void onClick(View v) {
- if (v == mDelPukButton) {
- if (mFocusedEntry != mPukText)
- mPukText.requestFocus();
- final Editable digits = mPukText.getEditableText();
- final int len = digits.length();
- if (len > 0) {
- digits.delete(len-1, len);
- }
- } else if (v == mDelPinButton) {
- if (mFocusedEntry != mPinText)
- mPinText.requestFocus();
- final Editable digits = mPinText.getEditableText();
- final int len = digits.length();
- if (len > 0) {
- digits.delete(len-1, len);
- }
- } else if (v == mOkButton) {
- checkPuk();
- }
- mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
-
- }
-
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (hasFocus)
- mFocusedEntry = (TextView)v;
- }
-
- private Dialog getSimUnlockProgressDialog() {
- if (mSimUnlockProgressDialog == null) {
- mSimUnlockProgressDialog = new ProgressDialog(mContext);
- mSimUnlockProgressDialog.setMessage(
- mContext.getString(R.string.lockscreen_sim_unlock_progress_dialog_message));
- mSimUnlockProgressDialog.setIndeterminate(true);
- mSimUnlockProgressDialog.setCancelable(false);
- mSimUnlockProgressDialog.getWindow().setType(
- WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- }
- return mSimUnlockProgressDialog;
- }
-
- private void checkPuk() {
- // make sure that the puk is at least 8 digits long.
- if (mPukText.getText().length() < 8) {
- // otherwise, display a message to the user, and don't submit.
- mHeaderText.setText(R.string.invalidPuk);
- mPukText.setText("");
- return;
- }
-
- if (mPinText.getText().length() < 4
- || mPinText.getText().length() > 8) {
- // otherwise, display a message to the user, and don't submit.
- mHeaderText.setText(R.string.invalidPin);
- mPinText.setText("");
- return;
- }
-
- getSimUnlockProgressDialog().show();
-
- new CheckSimPuk(mPukText.getText().toString(),
- mPinText.getText().toString()) {
- void onSimLockChangedResponse(final boolean success) {
- mPinText.post(new Runnable() {
- public void run() {
- if (mSimUnlockProgressDialog != null) {
- mSimUnlockProgressDialog.hide();
- }
- if (success) {
- // before closing the keyguard, report back that
- // the sim is unlocked so it knows right away
- mUpdateMonitor.reportSimUnlocked();
- mCallback.goToUnlockScreen();
- } else {
- mHeaderText.setText(R.string.badPuk);
- mPukText.setText("");
- mPinText.setText("");
- }
- }
- });
- }
- }.start();
- }
-
-
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- mCallback.goToLockScreen();
- return true;
- }
- final char match = event.getMatch(DIGITS);
- if (match != 0) {
- reportDigit(match - '0');
- return true;
- }
- if (keyCode == KeyEvent.KEYCODE_DEL) {
- mFocusedEntry.onKeyDown(keyCode, event);
- final Editable digits = mFocusedEntry.getEditableText();
- final int len = digits.length();
- if (len > 0) {
- digits.delete(len-1, len);
- }
- mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
- return true;
- }
-
- if (keyCode == KeyEvent.KEYCODE_ENTER) {
- checkPuk();
- return true;
- }
-
- return false;
- }
-
- private void reportDigit(int digit) {
- mFocusedEntry.append(Integer.toString(digit));
- }
-
- void updateConfiguration() {
- Configuration newConfig = getResources().getConfiguration();
- if (newConfig.orientation != mCreationOrientation) {
- mCallback.recreateMe(newConfig);
- } else if (newConfig.hardKeyboardHidden != mKeyboardHidden) {
- mKeyboardHidden = newConfig.hardKeyboardHidden;
- }
-
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- updateConfiguration();
- }
-
- /** {@inheritDoc} */
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- updateConfiguration();
- }
-
- /**
- * Helper class to handle input from touch dialer. Only relevant when
- * the keyboard is shut.
- */
- private class TouchInput implements View.OnClickListener {
- private TextView mZero;
- private TextView mOne;
- private TextView mTwo;
- private TextView mThree;
- private TextView mFour;
- private TextView mFive;
- private TextView mSix;
- private TextView mSeven;
- private TextView mEight;
- private TextView mNine;
- private TextView mCancelButton;
-
- private TouchInput() {
- mZero = (TextView) findViewById(R.id.zero);
- mOne = (TextView) findViewById(R.id.one);
- mTwo = (TextView) findViewById(R.id.two);
- mThree = (TextView) findViewById(R.id.three);
- mFour = (TextView) findViewById(R.id.four);
- mFive = (TextView) findViewById(R.id.five);
- mSix = (TextView) findViewById(R.id.six);
- mSeven = (TextView) findViewById(R.id.seven);
- mEight = (TextView) findViewById(R.id.eight);
- mNine = (TextView) findViewById(R.id.nine);
- mCancelButton = (TextView) findViewById(R.id.cancel);
-
- mZero.setText("0");
- mOne.setText("1");
- mTwo.setText("2");
- mThree.setText("3");
- mFour.setText("4");
- mFive.setText("5");
- mSix.setText("6");
- mSeven.setText("7");
- mEight.setText("8");
- mNine.setText("9");
-
- mZero.setOnClickListener(this);
- mOne.setOnClickListener(this);
- mTwo.setOnClickListener(this);
- mThree.setOnClickListener(this);
- mFour.setOnClickListener(this);
- mFive.setOnClickListener(this);
- mSix.setOnClickListener(this);
- mSeven.setOnClickListener(this);
- mEight.setOnClickListener(this);
- mNine.setOnClickListener(this);
- mCancelButton.setOnClickListener(this);
- }
-
-
- public void onClick(View v) {
- if (v == mCancelButton) {
- // clear the PIN/PUK entry fields if the user cancels
- mPinText.setText("");
- mPukText.setText("");
- mCallback.goToLockScreen();
- return;
- }
-
- final int digit = checkDigit(v);
- if (digit >= 0) {
- mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
- reportDigit(digit);
- }
- }
-
- private int checkDigit(View v) {
- int digit = -1;
- if (v == mZero) {
- digit = 0;
- } else if (v == mOne) {
- digit = 1;
- } else if (v == mTwo) {
- digit = 2;
- } else if (v == mThree) {
- digit = 3;
- } else if (v == mFour) {
- digit = 4;
- } else if (v == mFive) {
- digit = 5;
- } else if (v == mSix) {
- digit = 6;
- } else if (v == mSeven) {
- digit = 7;
- } else if (v == mEight) {
- digit = 8;
- } else if (v == mNine) {
- digit = 9;
- }
- return digit;
- }
- }
-
-}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimUnlockScreen.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimUnlockScreen.java
deleted file mode 100644
index 13c040c..0000000
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/SimUnlockScreen.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-
-import com.android.internal.telephony.ITelephony;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.text.Editable;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.Button;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-import com.android.internal.R;
-
-/**
- * Displays a dialer like interface to unlock the SIM PIN.
- */
-public class SimUnlockScreen extends LinearLayout implements KeyguardScreen, View.OnClickListener {
-
- private static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
-
- private final KeyguardUpdateMonitor mUpdateMonitor;
- private final KeyguardScreenCallback mCallback;
-
- private TextView mHeaderText;
- private TextView mPinText;
-
- private TextView mOkButton;
-
- private View mBackSpaceButton;
-
- private final int[] mEnteredPin = {0, 0, 0, 0, 0, 0, 0, 0};
- private int mEnteredDigits = 0;
-
- private ProgressDialog mSimUnlockProgressDialog = null;
-
- private LockPatternUtils mLockPatternUtils;
-
- private int mCreationOrientation;
-
- private int mKeyboardHidden;
-
- private KeyguardStatusViewManager mKeyguardStatusViewManager;
-
- private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
-
- public SimUnlockScreen(Context context, Configuration configuration,
- KeyguardUpdateMonitor updateMonitor, KeyguardScreenCallback callback,
- LockPatternUtils lockpatternutils) {
- super(context);
- mUpdateMonitor = updateMonitor;
- mCallback = callback;
-
- mCreationOrientation = configuration.orientation;
- mKeyboardHidden = configuration.hardKeyboardHidden;
- mLockPatternUtils = lockpatternutils;
-
- LayoutInflater inflater = LayoutInflater.from(context);
- if (mKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
- inflater.inflate(R.layout.keyguard_screen_sim_pin_landscape, this, true);
- } else {
- inflater.inflate(R.layout.keyguard_screen_sim_pin_portrait, this, true);
- new TouchInput();
- }
-
- mHeaderText = (TextView) findViewById(R.id.headerText);
- mPinText = (TextView) findViewById(R.id.pinDisplay);
- mBackSpaceButton = findViewById(R.id.backspace);
- mBackSpaceButton.setOnClickListener(this);
-
- mOkButton = (TextView) findViewById(R.id.ok);
-
- mHeaderText.setText(R.string.keyguard_password_enter_pin_code);
- mPinText.setFocusable(false);
-
- mOkButton.setOnClickListener(this);
-
- mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor,
- lockpatternutils, callback, false);
-
- setFocusableInTouchMode(true);
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return true;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mKeyguardStatusViewManager.onPause();
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- // start fresh
- mHeaderText.setText(R.string.keyguard_password_enter_pin_code);
-
- // make sure that the number of entered digits is consistent when we
- // erase the SIM unlock code, including orientation changes.
- mPinText.setText("");
- mEnteredDigits = 0;
-
- mKeyguardStatusViewManager.onResume();
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- // dismiss the dialog.
- if (mSimUnlockProgressDialog != null) {
- mSimUnlockProgressDialog.dismiss();
- mSimUnlockProgressDialog = null;
- }
- mUpdateMonitor.removeCallback(this);
- }
-
-
- /**
- * Since the IPC can block, we want to run the request in a separate thread
- * with a callback.
- */
- private abstract class CheckSimPin extends Thread {
-
- private final String mPin;
-
- protected CheckSimPin(String pin) {
- mPin = pin;
- }
-
- abstract void onSimLockChangedResponse(boolean success);
-
- @Override
- public void run() {
- try {
- final boolean result = ITelephony.Stub.asInterface(ServiceManager
- .checkService("phone")).supplyPin(mPin);
- post(new Runnable() {
- public void run() {
- onSimLockChangedResponse(result);
- }
- });
- } catch (RemoteException e) {
- post(new Runnable() {
- public void run() {
- onSimLockChangedResponse(false);
- }
- });
- }
- }
- }
-
- public void onClick(View v) {
- if (v == mBackSpaceButton) {
- final Editable digits = mPinText.getEditableText();
- final int len = digits.length();
- if (len > 0) {
- digits.delete(len-1, len);
- mEnteredDigits--;
- }
- mCallback.pokeWakelock();
- } else if (v == mOkButton) {
- checkPin();
- }
- }
-
- private Dialog getSimUnlockProgressDialog() {
- if (mSimUnlockProgressDialog == null) {
- mSimUnlockProgressDialog = new ProgressDialog(mContext);
- mSimUnlockProgressDialog.setMessage(
- mContext.getString(R.string.lockscreen_sim_unlock_progress_dialog_message));
- mSimUnlockProgressDialog.setIndeterminate(true);
- mSimUnlockProgressDialog.setCancelable(false);
- mSimUnlockProgressDialog.getWindow().setType(
- WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
- }
- return mSimUnlockProgressDialog;
- }
-
- private void checkPin() {
-
- // make sure that the pin is at least 4 digits long.
- if (mEnteredDigits < 4) {
- // otherwise, display a message to the user, and don't submit.
- mHeaderText.setText(R.string.invalidPin);
- mPinText.setText("");
- mEnteredDigits = 0;
- mCallback.pokeWakelock();
- return;
- }
- getSimUnlockProgressDialog().show();
-
- new CheckSimPin(mPinText.getText().toString()) {
- void onSimLockChangedResponse(final boolean success) {
- mPinText.post(new Runnable() {
- public void run() {
- if (mSimUnlockProgressDialog != null) {
- mSimUnlockProgressDialog.hide();
- }
- if (success) {
- // before closing the keyguard, report back that
- // the sim is unlocked so it knows right away
- mUpdateMonitor.reportSimUnlocked();
- mCallback.goToUnlockScreen();
- } else {
- mHeaderText.setText(R.string.keyguard_password_wrong_pin_code);
- mPinText.setText("");
- mEnteredDigits = 0;
- }
- mCallback.pokeWakelock();
- }
- });
- }
- }.start();
- }
-
-
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- mCallback.goToLockScreen();
- return true;
- }
-
- final char match = event.getMatch(DIGITS);
- if (match != 0) {
- reportDigit(match - '0');
- return true;
- }
- if (keyCode == KeyEvent.KEYCODE_DEL) {
- if (mEnteredDigits > 0) {
- mPinText.onKeyDown(keyCode, event);
- mEnteredDigits--;
- }
- return true;
- }
-
- if (keyCode == KeyEvent.KEYCODE_ENTER) {
- checkPin();
- return true;
- }
-
- return false;
- }
-
- private void reportDigit(int digit) {
- if (mEnteredDigits == 0) {
- mPinText.setText("");
- }
- if (mEnteredDigits == 8) {
- return;
- }
- mPinText.append(Integer.toString(digit));
- mEnteredPin[mEnteredDigits++] = digit;
- }
-
- void updateConfiguration() {
- Configuration newConfig = getResources().getConfiguration();
- if (newConfig.orientation != mCreationOrientation) {
- mCallback.recreateMe(newConfig);
- } else if (newConfig.hardKeyboardHidden != mKeyboardHidden) {
- mKeyboardHidden = newConfig.hardKeyboardHidden;
- }
- }
-
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- updateConfiguration();
- }
-
- /** {@inheritDoc} */
- @Override
- protected void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- updateConfiguration();
- }
-
- /**
- * Helper class to handle input from touch dialer. Only relevant when
- * the keyboard is shut.
- */
- private class TouchInput implements View.OnClickListener {
- private TextView mZero;
- private TextView mOne;
- private TextView mTwo;
- private TextView mThree;
- private TextView mFour;
- private TextView mFive;
- private TextView mSix;
- private TextView mSeven;
- private TextView mEight;
- private TextView mNine;
- private TextView mCancelButton;
-
- private TouchInput() {
- mZero = (TextView) findViewById(R.id.zero);
- mOne = (TextView) findViewById(R.id.one);
- mTwo = (TextView) findViewById(R.id.two);
- mThree = (TextView) findViewById(R.id.three);
- mFour = (TextView) findViewById(R.id.four);
- mFive = (TextView) findViewById(R.id.five);
- mSix = (TextView) findViewById(R.id.six);
- mSeven = (TextView) findViewById(R.id.seven);
- mEight = (TextView) findViewById(R.id.eight);
- mNine = (TextView) findViewById(R.id.nine);
- mCancelButton = (TextView) findViewById(R.id.cancel);
-
- mZero.setText("0");
- mOne.setText("1");
- mTwo.setText("2");
- mThree.setText("3");
- mFour.setText("4");
- mFive.setText("5");
- mSix.setText("6");
- mSeven.setText("7");
- mEight.setText("8");
- mNine.setText("9");
-
- mZero.setOnClickListener(this);
- mOne.setOnClickListener(this);
- mTwo.setOnClickListener(this);
- mThree.setOnClickListener(this);
- mFour.setOnClickListener(this);
- mFive.setOnClickListener(this);
- mSix.setOnClickListener(this);
- mSeven.setOnClickListener(this);
- mEight.setOnClickListener(this);
- mNine.setOnClickListener(this);
- mCancelButton.setOnClickListener(this);
- }
-
-
- public void onClick(View v) {
- if (v == mCancelButton) {
- mPinText.setText(""); // clear the PIN entry field if the user cancels
- mCallback.goToLockScreen();
- return;
- }
-
- final int digit = checkDigit(v);
- if (digit >= 0) {
- mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS);
- reportDigit(digit);
- }
- }
-
- private int checkDigit(View v) {
- int digit = -1;
- if (v == mZero) {
- digit = 0;
- } else if (v == mOne) {
- digit = 1;
- } else if (v == mTwo) {
- digit = 2;
- } else if (v == mThree) {
- digit = 3;
- } else if (v == mFour) {
- digit = 4;
- } else if (v == mFive) {
- digit = 5;
- } else if (v == mSix) {
- digit = 6;
- } else if (v == mSeven) {
- digit = 7;
- } else if (v == mEight) {
- digit = 8;
- } else if (v == mNine) {
- digit = 9;
- }
- return digit;
- }
- }
-}
diff --git a/policy/tests/Android.mk b/policy/tests/Android.mk
deleted file mode 100644
index ffb60b1..0000000
--- a/policy/tests/Android.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2010, The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_JAVA_LIBRARIES := android.policy android.test.runner
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := FrameworkPolicyTests
-
-include $(BUILD_PACKAGE)
-
diff --git a/policy/tests/AndroidManifest.xml b/policy/tests/AndroidManifest.xml
deleted file mode 100644
index dbdabfa..0000000
--- a/policy/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.frameworks.policy.tests">
-
- <application>
- <uses-library android:name="android.test.runner" />
- </application>
-
- <uses-permission android:name="android.permission.GET_ACCOUNTS" />
- <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
-
- <instrumentation
- android:name="android.test.InstrumentationTestRunner"
- android:targetPackage="com.android.frameworks.policy.tests"
- android:label="Framework policy tests" />
-</manifest>
diff --git a/policy/tests/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewTest.java b/policy/tests/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewTest.java
deleted file mode 100644
index 97c5672..0000000
--- a/policy/tests/src/com/android/internal/policy/impl/keyguard_obsolete/LockPatternKeyguardViewTest.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.internal.policy.impl.keyguard_obsolete;
-
-import android.content.Context;
-
-import com.android.internal.policy.impl.keyguard_obsolete.KeyguardScreen;
-import com.android.internal.policy.impl.keyguard_obsolete.KeyguardUpdateMonitor;
-import com.android.internal.policy.impl.keyguard_obsolete.KeyguardViewCallback;
-import com.android.internal.policy.impl.keyguard_obsolete.KeyguardWindowController;
-import com.android.internal.policy.impl.keyguard_obsolete.LockPatternKeyguardView;
-import com.android.internal.telephony.IccCardConstants;
-import android.content.res.Configuration;
-import android.test.AndroidTestCase;
-import android.view.View;
-import android.view.KeyEvent;
-import com.android.internal.widget.LockPatternUtils;
-import com.google.android.collect.Lists;
-
-import java.util.List;
-
-/**
- * Tests for {@link com.android.internal.policy.impl.LockPatternKeyguardView},
- * which handles the management of screens while the keyguard is showing.
- */
-public class LockPatternKeyguardViewTest extends AndroidTestCase {
- private MockUpdateMonitor mUpdateMonitor;
- private LockPatternUtils mLockPatternUtils;
- private TestableLockPatternKeyguardView mLPKV;
- private MockKeyguardCallback mKeyguardViewCallback;
-
- private static class MockUpdateMonitor extends KeyguardUpdateMonitor {
-
- public IccCardConstants.State simState = IccCardConstants.State.READY;
-
- private MockUpdateMonitor(Context context) {
- super(context);
- }
-
- @Override
- public IccCardConstants.State getSimState() {
- return simState;
- }
- }
-
- private static class MockLockPatternUtils extends LockPatternUtils {
- boolean isLockPatternEnabled = true;
- public boolean isPermanentlyLocked = false;
-
- public MockLockPatternUtils(Context context) {
- super(context);
- }
-
- @Override
- public boolean isLockPatternEnabled() {
- return isLockPatternEnabled;
- }
-
- @Override
- public void setLockPatternEnabled(boolean lockPatternEnabled) {
- isLockPatternEnabled = lockPatternEnabled;
- }
-
- @Override
- public boolean isPermanentlyLocked() {
- return isPermanentlyLocked;
- }
-
- public void setPermanentlyLocked(boolean permanentlyLocked) {
- isPermanentlyLocked = permanentlyLocked;
- }
- }
-
- private static class MockKeyguardScreen extends View implements KeyguardScreen {
-
- private int mOnPauseCount = 0;
- private int mOnResumeCount = 0;
- private int mCleanupCount = 0;
-
- private MockKeyguardScreen(Context context) {
- super(context);
- setFocusable(true);
- }
-
- /** {@inheritDoc} */
- public boolean needsInput() {
- return false;
- }
-
- /** {@inheritDoc} */
- public void onPause() {
- mOnPauseCount++;
- }
-
- /** {@inheritDoc} */
- public void onResume() {
- mOnResumeCount++;
- }
-
- /** {@inheritDoc} */
- public void cleanUp() {
- mCleanupCount++;
- }
-
- public int getOnPauseCount() {
- return mOnPauseCount;
- }
-
- public int getOnResumeCount() {
- return mOnResumeCount;
- }
-
- public int getCleanupCount() {
- return mCleanupCount;
- }
- }
-
- /**
- * Allows us to inject the lock and unlock views to simulate their behavior
- * and detect their creation.
- */
- private static class TestableLockPatternKeyguardView extends LockPatternKeyguardView {
- private List<MockKeyguardScreen> mInjectedLockScreens;
- private List<MockKeyguardScreen> mInjectedUnlockScreens;
-
-
-
- private TestableLockPatternKeyguardView(Context context, KeyguardViewCallback callback,
- KeyguardUpdateMonitor updateMonitor,
- LockPatternUtils lockPatternUtils, KeyguardWindowController controller) {
- super(context, callback, updateMonitor, lockPatternUtils, controller);
- }
-
- @Override
- View createLockScreen() {
- final MockKeyguardScreen newView = new MockKeyguardScreen(getContext());
- if (mInjectedLockScreens == null) mInjectedLockScreens = Lists.newArrayList();
- mInjectedLockScreens.add(newView);
- return newView;
- }
-
- @Override
- View createUnlockScreenFor(UnlockMode unlockMode) {
- final MockKeyguardScreen newView = new MockKeyguardScreen(getContext());
- if (mInjectedUnlockScreens == null) mInjectedUnlockScreens = Lists.newArrayList();
- mInjectedUnlockScreens.add(newView);
- return newView;
- }
-
- public List<MockKeyguardScreen> getInjectedLockScreens() {
- return mInjectedLockScreens;
- }
-
- public List<MockKeyguardScreen> getInjectedUnlockScreens() {
- return mInjectedUnlockScreens;
- }
- }
-
- private static class MockKeyguardCallback implements KeyguardViewCallback {
-
- private int mPokeWakelockCount = 0;
- private int mKeyguardDoneCount = 0;
-
- public void pokeWakelock() {
- mPokeWakelockCount++;
- }
-
- public void pokeWakelock(int millis) {
- mPokeWakelockCount++;
- }
-
- public void keyguardDone(boolean authenticated) {
- mKeyguardDoneCount++;
- }
-
- public void keyguardDoneDrawing() {
-
- }
-
- public int getPokeWakelockCount() {
- return mPokeWakelockCount;
- }
-
- public int getKeyguardDoneCount() {
- return mKeyguardDoneCount;
- }
- }
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- mUpdateMonitor = new MockUpdateMonitor(getContext());
- mLockPatternUtils = new MockLockPatternUtils(getContext());
- mKeyguardViewCallback = new MockKeyguardCallback();
-
- mLPKV = new TestableLockPatternKeyguardView(getContext(), mKeyguardViewCallback,
- mUpdateMonitor, mLockPatternUtils, new KeyguardWindowController() {
- public void setNeedsInput(boolean needsInput) {
- }
- });
- }
-
- public void testStateAfterCreatedWhileScreenOff() {
-
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
-
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
- MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);
-
- assertEquals(0, lockScreen.getOnPauseCount());
- assertEquals(0, lockScreen.getOnResumeCount());
- assertEquals(0, lockScreen.getCleanupCount());
-
- assertEquals(0, unlockScreen.getOnPauseCount());
- assertEquals(0, unlockScreen.getOnResumeCount());
- assertEquals(0, unlockScreen.getCleanupCount());
-
- assertEquals(0, mKeyguardViewCallback.getPokeWakelockCount());
- assertEquals(0, mKeyguardViewCallback.getKeyguardDoneCount());
- }
-
- public void testWokenByNonMenuKey() {
- mLPKV.wakeWhenReadyTq(0);
-
- // should have poked the wakelock to turn on the screen
- assertEquals(1, mKeyguardViewCallback.getPokeWakelockCount());
-
- // shouldn't be any additional views created
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
- MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);
-
- // lock screen should be only visible one
- assertEquals(View.VISIBLE, lockScreen.getVisibility());
- assertEquals(View.GONE, unlockScreen.getVisibility());
-
- // on resume not called until screen turns on
- assertEquals(0, lockScreen.getOnPauseCount());
- assertEquals(0, lockScreen.getOnResumeCount());
- assertEquals(0, lockScreen.getCleanupCount());
-
- assertEquals(0, unlockScreen.getOnPauseCount());
- assertEquals(0, unlockScreen.getOnResumeCount());
- assertEquals(0, unlockScreen.getCleanupCount());
-
- // simulate screen turning on
- mLPKV.onScreenTurnedOn();
-
- assertEquals(0, lockScreen.getOnPauseCount());
- assertEquals(1, lockScreen.getOnResumeCount());
- assertEquals(0, lockScreen.getCleanupCount());
-
- assertEquals(0, unlockScreen.getOnPauseCount());
- assertEquals(0, unlockScreen.getOnResumeCount());
- assertEquals(0, unlockScreen.getCleanupCount());
- }
-
- public void testWokenByMenuKeyWhenPatternSet() {
- assertEquals(true, mLockPatternUtils.isLockPatternEnabled());
-
- mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);
-
- // should have poked the wakelock to turn on the screen
- assertEquals(1, mKeyguardViewCallback.getPokeWakelockCount());
-
- // shouldn't be any additional views created
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
- MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);
-
- // unlock screen should be only visible one
- assertEquals(View.GONE, lockScreen.getVisibility());
- assertEquals(View.VISIBLE, unlockScreen.getVisibility());
- }
-
- public void testScreenRequestsRecreation() {
- mLPKV.wakeWhenReadyTq(0);
- mLPKV.onScreenTurnedOn();
-
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
-
- assertEquals(0, lockScreen.getOnPauseCount());
- assertEquals(1, lockScreen.getOnResumeCount());
-
- // simulate screen asking to be recreated
- mLPKV.mKeyguardScreenCallback.recreateMe(new Configuration());
-
- // should have been recreated
- assertEquals(2, mLPKV.getInjectedLockScreens().size());
- assertEquals(2, mLPKV.getInjectedUnlockScreens().size());
-
- // both old screens should have been cleaned up
- assertEquals(1, mLPKV.getInjectedLockScreens().get(0).getCleanupCount());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().get(0).getCleanupCount());
-
- // old lock screen should have been paused
- assertEquals(1, mLPKV.getInjectedLockScreens().get(0).getOnPauseCount());
- assertEquals(0, mLPKV.getInjectedUnlockScreens().get(0).getOnPauseCount());
-
- // new lock screen should have been resumed
- assertEquals(1, mLPKV.getInjectedLockScreens().get(1).getOnResumeCount());
- assertEquals(0, mLPKV.getInjectedUnlockScreens().get(1).getOnResumeCount());
- }
-
- public void testMenuDoesntGoToUnlockScreenOnWakeWhenPukLocked() {
- // PUK locked
- mUpdateMonitor.simState = IccCardConstants.State.PUK_REQUIRED;
-
- // wake by menu
- mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);
-
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
- MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);
-
- // lock screen should be only visible one
- assertEquals(View.VISIBLE, lockScreen.getVisibility());
- assertEquals(View.GONE, unlockScreen.getVisibility());
- }
-
- public void testMenuGoesToLockScreenWhenDeviceNotSecure() {
- mLockPatternUtils.setLockPatternEnabled(false);
-
- // wake by menu
- mLPKV.wakeWhenReadyTq(KeyEvent.KEYCODE_MENU);
-
- assertEquals(1, mLPKV.getInjectedLockScreens().size());
- assertEquals(1, mLPKV.getInjectedUnlockScreens().size());
- MockKeyguardScreen lockScreen = mLPKV.getInjectedLockScreens().get(0);
- MockKeyguardScreen unlockScreen = mLPKV.getInjectedUnlockScreens().get(0);
-
- // lock screen should be only visible one
- assertEquals(View.VISIBLE, lockScreen.getVisibility());
- assertEquals(View.GONE, unlockScreen.getVisibility());
- }
-}
diff --git a/services/java/com/android/server/AppOpsService.java b/services/java/com/android/server/AppOpsService.java
new file mode 100644
index 0000000..5ad4be8
--- /dev/null
+++ b/services/java/com/android/server/AppOpsService.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.HashMap;
+
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Binder;
+import android.os.Environment;
+import android.os.Process;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.TimeUtils;
+
+import com.android.internal.app.IAppOpsService;
+
+public class AppOpsService extends IAppOpsService.Stub {
+ static final String TAG = "AppOps";
+
+ Context mContext;
+ final AtomicFile mFile;
+
+ final SparseArray<HashMap<String, Ops>> mUidOps
+ = new SparseArray<HashMap<String, Ops>>();
+
+ final static class Ops extends SparseArray<Op> {
+ public final String packageName;
+
+ public Ops(String _packageName) {
+ packageName = _packageName;
+ }
+ }
+
+ final static class Op {
+ public final int op;
+ public int duration;
+ public long time;
+
+ public Op(int _op) {
+ op = _op;
+ }
+ }
+
+ public AppOpsService() {
+ mFile = new AtomicFile(new File(Environment.getSecureDataDirectory(), "appops.xml"));
+ }
+
+ public void publish(Context context) {
+ mContext = context;
+ ServiceManager.addService(Context.APP_OPS_SERVICE, asBinder());
+ }
+
+ public void shutdown() {
+ Slog.w(TAG, "Writing app ops before shutdown...");
+ }
+
+ @Override
+ public int noteOperation(int code, int uid, String packageName) {
+ uid = handleIncomingUid(uid);
+ synchronized (this) {
+ Op op = getOpLocked(code, uid, packageName);
+ if (op == null) {
+ return AppOpsManager.MODE_IGNORED;
+ }
+ if (op.duration == -1) {
+ Slog.w(TAG, "Noting op not finished: uid " + uid + " pkg " + packageName
+ + " code " + code + " time=" + op.time + " duration=" + op.duration);
+ }
+ op.time = System.currentTimeMillis();
+ op.duration = 0;
+ }
+ return AppOpsManager.MODE_ALLOWED;
+ }
+
+ @Override
+ public int startOperation(int code, int uid, String packageName) {
+ uid = handleIncomingUid(uid);
+ synchronized (this) {
+ Op op = getOpLocked(code, uid, packageName);
+ if (op == null) {
+ return AppOpsManager.MODE_IGNORED;
+ }
+ if (op.duration == -1) {
+ Slog.w(TAG, "Starting op not finished: uid " + uid + " pkg " + packageName
+ + " code " + code + " time=" + op.time + " duration=" + op.duration);
+ }
+ op.time = System.currentTimeMillis();
+ op.duration = -1;
+ }
+ return AppOpsManager.MODE_ALLOWED;
+ }
+
+ @Override
+ public void finishOperation(int code, int uid, String packageName) {
+ uid = handleIncomingUid(uid);
+ synchronized (this) {
+ Op op = getOpLocked(code, uid, packageName);
+ if (op == null) {
+ return;
+ }
+ if (op.duration != -1) {
+ Slog.w(TAG, "Ignoring finishing op not started: uid " + uid + " pkg " + packageName
+ + " code " + code + " time=" + op.time + " duration=" + op.duration);
+ return;
+ }
+ op.duration = (int)(System.currentTimeMillis() - op.time);
+ }
+ }
+
+ @Override
+ public int noteTimedOperation(int code, int uid, String packageName, int duration) {
+ uid = handleIncomingUid(uid);
+ synchronized (this) {
+ Op op = getOpLocked(code, uid, packageName);
+ if (op == null) {
+ return AppOpsManager.MODE_IGNORED;
+ }
+ if (op.duration == -1) {
+ Slog.w(TAG, "Noting op not finished: uid " + uid + " pkg " + packageName
+ + " code " + code + " time=" + op.time + " duration=" + op.duration);
+ }
+ op.time = System.currentTimeMillis();
+ op.duration = duration;
+ }
+ return AppOpsManager.MODE_ALLOWED;
+ }
+
+ @Override
+ public void earlyFinishOperation(int code, int uid, String packageName) {
+ uid = handleIncomingUid(uid);
+ synchronized (this) {
+ Op op = getOpLocked(code, uid, packageName);
+ if (op == null) {
+ return;
+ }
+ if (op.duration != -1) {
+ Slog.w(TAG, "Noting timed op not finished: uid " + uid + " pkg " + packageName
+ + " code " + code + " time=" + op.time + " duration=" + op.duration);
+ }
+ int newDuration = (int)(System.currentTimeMillis() - op.time);
+ if (newDuration < op.duration) {
+ op.duration = newDuration;
+ }
+ }
+ }
+
+ private int handleIncomingUid(int uid) {
+ if (uid == Binder.getCallingUid()) {
+ return uid;
+ }
+ if (Binder.getCallingPid() == Process.myPid()) {
+ return uid;
+ }
+ mContext.enforcePermission(android.Manifest.permission.UPDATE_APP_OPS_STATS,
+ Binder.getCallingPid(), Binder.getCallingUid(), null);
+ return uid;
+ }
+
+ private Op getOpLocked(int code, int uid, String packageName) {
+ HashMap<String, Ops> pkgOps = mUidOps.get(uid);
+ if (pkgOps == null) {
+ pkgOps = new HashMap<String, Ops>();
+ mUidOps.put(uid, pkgOps);
+ }
+ Ops ops = pkgOps.get(packageName);
+ if (ops == null) {
+ // This is the first time we have seen this package name under this uid,
+ // so let's make sure it is valid.
+ // XXX for now we always allow null through until we can fix everything
+ // to provide the name.
+ if (packageName != null) {
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ int pkgUid = -1;
+ try {
+ pkgUid = mContext.getPackageManager().getPackageUid(packageName,
+ UserHandle.getUserId(uid));
+ } catch (NameNotFoundException e) {
+ }
+ if (pkgUid != uid) {
+ // Oops! The package name is not valid for the uid they are calling
+ // under. Abort.
+ Slog.w(TAG, "Bad call: specified package " + packageName
+ + " under uid " + uid + " but it is really " + pkgUid);
+ return null;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+ ops = new Ops(packageName);
+ pkgOps.put(packageName, ops);
+ }
+ Op op = ops.get(code);
+ if (op == null) {
+ op = new Op(code);
+ ops.put(code, op);
+ }
+ return op;
+ }
+
+ @Override
+ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump ApOps service from from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid());
+ return;
+ }
+
+ synchronized (this) {
+ pw.println("Current AppOps Service state:");
+ for (int i=0; i<mUidOps.size(); i++) {
+ pw.print(" Uid "); UserHandle.formatUid(pw, mUidOps.keyAt(i)); pw.println(":");
+ HashMap<String, Ops> pkgOps = mUidOps.valueAt(i);
+ for (Ops ops : pkgOps.values()) {
+ pw.print(" Package "); pw.print(ops.packageName); pw.println(":");
+ for (int j=0; j<ops.size(); j++) {
+ Op op = ops.valueAt(j);
+ pw.print(" "); pw.print(AppOpsManager.opToString(op.op));
+ pw.print(": time=");
+ TimeUtils.formatDuration(System.currentTimeMillis()-op.time, pw);
+ pw.print(" ago");
+ if (op.duration == -1) {
+ pw.println(" (running)");
+ } else {
+ pw.print("; duration=");
+ TimeUtils.formatDuration(op.duration, pw);
+ pw.println();
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 0f08c56..9e40dc5 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
@@ -46,12 +47,14 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.WorkSource;
@@ -59,6 +62,7 @@
import android.util.Log;
import android.util.Slog;
+import com.android.internal.app.IAppOpsService;
import com.android.internal.content.PackageMonitor;
import com.android.internal.location.ProviderProperties;
import com.android.internal.location.ProviderRequest;
@@ -86,7 +90,7 @@
* The service class that manages LocationProviders and issues location
* updates and alerts.
*/
-public class LocationManagerService extends ILocationManager.Stub implements Runnable {
+public class LocationManagerService extends ILocationManager.Stub {
private static final String TAG = "LocationManagerService";
public static final boolean D = false;
@@ -123,11 +127,12 @@
private static final LocationRequest DEFAULT_LOCATION_REQUEST = new LocationRequest();
private final Context mContext;
+ private final AppOpsManager mAppOps;
// used internally for synchronization
private final Object mLock = new Object();
- // --- fields below are final after init() ---
+ // --- fields below are final after systemReady() ---
private LocationFudger mLocationFudger;
private GeofenceManager mGeofenceManager;
private PowerManager.WakeLock mWakeLock;
@@ -138,6 +143,7 @@
private LocationWorkerHandler mLocationHandler;
private PassiveProvider mPassiveProvider; // track passive provider for special cases
private LocationBlacklist mBlacklist;
+ private HandlerThread mHandlerThread;
// --- fields below are protected by mWakeLock ---
private int mPendingBroadcasts;
@@ -185,6 +191,7 @@
public LocationManagerService(Context context) {
super();
mContext = context;
+ mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
if (D) Log.d(TAG, "Constructed");
@@ -192,48 +199,45 @@
}
public void systemReady() {
- Thread thread = new Thread(null, this, THREAD_NAME);
- thread.start();
- }
-
- @Override
- public void run() {
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- Looper.prepare();
- mLocationHandler = new LocationWorkerHandler();
- init();
- Looper.loop();
- }
-
- private void init() {
- if (D) Log.d(TAG, "init()");
-
- PowerManager powerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
- mPackageManager = mContext.getPackageManager();
-
- mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
- mBlacklist.init();
- mLocationFudger = new LocationFudger(mContext, mLocationHandler);
-
synchronized (mLock) {
- loadProvidersLocked();
- }
+ if (D) Log.d(TAG, "systemReady()");
- mGeofenceManager = new GeofenceManager(mContext, mBlacklist);
+ // fetch package manager
+ mPackageManager = mContext.getPackageManager();
+
+ // prepare wake lock
+ PowerManager powerManager =
+ (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+ mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKELOCK_KEY);
+
+ // prepare worker thread
+ mHandlerThread = new HandlerThread(THREAD_NAME, Process.THREAD_PRIORITY_BACKGROUND);
+ mHandlerThread.start();
+ mLocationHandler = new LocationWorkerHandler(mHandlerThread.getLooper());
+
+ // prepare mLocationHandler's dependents
+ mLocationFudger = new LocationFudger(mContext, mLocationHandler);
+ mBlacklist = new LocationBlacklist(mContext, mLocationHandler);
+ mBlacklist.init();
+ mGeofenceManager = new GeofenceManager(mContext, mBlacklist);
+
+ // prepare providers
+ loadProvidersLocked();
+ updateProvidersLocked();
+ }
// listen for settings changes
mContext.getContentResolver().registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.LOCATION_PROVIDERS_ALLOWED), true,
new ContentObserver(mLocationHandler) {
- @Override
- public void onChange(boolean selfChange) {
- synchronized (mLock) {
- updateProvidersLocked();
- }
- }
- }, UserHandle.USER_ALL);
- mPackageMonitor.register(mContext, Looper.myLooper(), true);
+ @Override
+ public void onChange(boolean selfChange) {
+ synchronized (mLock) {
+ updateProvidersLocked();
+ }
+ }
+ }, UserHandle.USER_ALL);
+ mPackageMonitor.register(mContext, mLocationHandler.getLooper(), true);
// listen for user change
IntentFilter intentFilter = new IntentFilter();
@@ -247,9 +251,7 @@
switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
}
}
- }, UserHandle.ALL, intentFilter, null, null);
-
- updateProvidersLocked();
+ }, UserHandle.ALL, intentFilter, null, mLocationHandler);
}
private void ensureFallbackFusedProviderPresentLocked(ArrayList<String> pkgs) {
@@ -329,7 +331,8 @@
if (GpsLocationProvider.isSupported()) {
// Create a gps location provider
- GpsLocationProvider gpsProvider = new GpsLocationProvider(mContext, this);
+ GpsLocationProvider gpsProvider = new GpsLocationProvider(mContext, this,
+ mLocationHandler.getLooper());
mGpsStatusProvider = gpsProvider.getGpsStatusProvider();
mNetInitiatedListener = gpsProvider.getNetInitiatedListener();
addProviderLocked(gpsProvider);
@@ -389,7 +392,7 @@
// bind to geocoder provider
mGeocodeProvider = GeocoderProxy.createAndBind(mContext, providerPackageNames,
- mCurrentUserId);
+ mLocationHandler, mCurrentUserId);
if (mGeocodeProvider == null) {
Slog.e(TAG, "no geocoder provider found");
}
@@ -526,6 +529,10 @@
}
public boolean callLocationChangedLocked(Location location) {
+ if (mAppOps.noteOpNoThrow(AppOpsManager.OP_LOCATION, mUid, mPackageName)
+ != AppOpsManager.MODE_ALLOWED) {
+ return true;
+ }
if (mListener != null) {
try {
synchronized (this) {
@@ -1164,7 +1171,7 @@
private Receiver checkListenerOrIntent(ILocationListener listener, PendingIntent intent,
int pid, int uid, String packageName) {
if (intent == null && listener == null) {
- throw new IllegalArgumentException("need eiter listener or intent");
+ throw new IllegalArgumentException("need either listener or intent");
} else if (intent != null && listener != null) {
throw new IllegalArgumentException("cannot register both listener and intent");
} else if (intent != null) {
@@ -1187,11 +1194,14 @@
final int pid = Binder.getCallingPid();
final int uid = Binder.getCallingUid();
- Receiver recevier = checkListenerOrIntent(listener, intent, pid, uid, packageName);
-
// providers may use public location API's, need to clear identity
long identity = Binder.clearCallingIdentity();
try {
+ // We don't check for MODE_IGNORED here; we will do that when we go to deliver
+ // a location.
+ mAppOps.noteOp(AppOpsManager.OP_LOCATION, uid, packageName);
+ Receiver recevier = checkListenerOrIntent(listener, intent, pid, uid, packageName);
+
synchronized (mLock) {
requestLocationUpdatesLocked(sanitizedRequest, recevier, pid, uid, packageName);
}
@@ -1298,8 +1308,14 @@
request.getProvider());
// no need to sanitize this request, as only the provider name is used
- long identity = Binder.clearCallingIdentity();
+ final int uid = Binder.getCallingUid();
+ final long identity = Binder.clearCallingIdentity();
try {
+ if (mAppOps.noteOp(AppOpsManager.OP_LOCATION, uid, packageName)
+ != AppOpsManager.MODE_ALLOWED) {
+ return null;
+ }
+
if (mBlacklist.isBlacklisted(packageName)) {
if (D) Log.d(TAG, "not returning last loc for blacklisted app: " +
packageName);
@@ -1383,13 +1399,24 @@
@Override
- public boolean addGpsStatusListener(IGpsStatusListener listener) {
+ public boolean addGpsStatusListener(IGpsStatusListener listener, String packageName) {
if (mGpsStatusProvider == null) {
return false;
}
checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(),
LocationManager.GPS_PROVIDER);
+ final int uid = Binder.getCallingUid();
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ if (mAppOps.noteOp(AppOpsManager.OP_LOCATION, uid, packageName)
+ != AppOpsManager.MODE_ALLOWED) {
+ return false;
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+
try {
mGpsStatusProvider.addGpsStatusListener(listener);
} catch (RemoteException e) {
@@ -1715,6 +1742,10 @@
}
private class LocationWorkerHandler extends Handler {
+ public LocationWorkerHandler(Looper looper) {
+ super(looper, null, true);
+ }
+
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a7b502a..c33eb2b 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -261,7 +261,6 @@
ServiceManager.addService(Context.USER_SERVICE,
UserManagerService.getInstance());
-
mContentResolver = context.getContentResolver();
// The AccountManager must come before the ContentService
diff --git a/services/java/com/android/server/VibratorService.java b/services/java/com/android/server/VibratorService.java
index df91dec..69379f1 100644
--- a/services/java/com/android/server/VibratorService.java
+++ b/services/java/com/android/server/VibratorService.java
@@ -16,6 +16,7 @@
package com.android.server;
+import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -30,6 +31,7 @@
import android.os.RemoteException;
import android.os.IBinder;
import android.os.Binder;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.Vibrator;
@@ -39,6 +41,9 @@
import android.util.Slog;
import android.view.InputDevice;
+import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IBatteryStats;
+
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.ListIterator;
@@ -54,6 +59,8 @@
private final Context mContext;
private final PowerManager.WakeLock mWakeLock;
+ private final IAppOpsService mAppOpsService;
+ private final IBatteryStats mBatteryStatsService;
private InputManager mIm;
volatile VibrateThread mThread;
@@ -64,6 +71,8 @@
private boolean mVibrateInputDevicesSetting; // guarded by mInputDeviceVibrators
private boolean mInputDeviceListenerRegistered; // guarded by mInputDeviceVibrators
+ private int mCurVibUid = -1;
+
native static boolean vibratorExists();
native static void vibratorOn(long milliseconds);
native static void vibratorOff();
@@ -75,23 +84,25 @@
private final long[] mPattern;
private final int mRepeat;
private final int mUid;
+ private final String mPackageName;
- Vibration(IBinder token, long millis, int uid) {
- this(token, millis, null, 0, uid);
+ Vibration(IBinder token, long millis, int uid, String packageName) {
+ this(token, millis, null, 0, uid, packageName);
}
- Vibration(IBinder token, long[] pattern, int repeat, int uid) {
- this(token, 0, pattern, repeat, uid);
+ Vibration(IBinder token, long[] pattern, int repeat, int uid, String packageName) {
+ this(token, 0, pattern, repeat, uid, packageName);
}
private Vibration(IBinder token, long millis, long[] pattern,
- int repeat, int uid) {
+ int repeat, int uid, String packageName) {
mToken = token;
mTimeout = millis;
mStartTime = SystemClock.uptimeMillis();
mPattern = pattern;
mRepeat = repeat;
mUid = uid;
+ mPackageName = packageName;
}
public void binderDied() {
@@ -131,6 +142,9 @@
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*vibrator*");
mWakeLock.setReferenceCounted(true);
+ mAppOpsService = IAppOpsService.Stub.asInterface(ServiceManager.getService(Context.APP_OPS_SERVICE));
+ mBatteryStatsService = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));
+
mVibrations = new LinkedList<Vibration>();
IntentFilter filter = new IntentFilter();
@@ -164,7 +178,7 @@
return doVibratorExists();
}
- public void vibrate(long milliseconds, IBinder token) {
+ public void vibrate(String packageName, long milliseconds, IBinder token) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Requires VIBRATE permission");
@@ -180,12 +194,18 @@
return;
}
- Vibration vib = new Vibration(token, milliseconds, uid);
- synchronized (mVibrations) {
- removeVibrationLocked(token);
- doCancelVibrateLocked();
- mCurrentVibration = vib;
- startVibrationLocked(vib);
+ Vibration vib = new Vibration(token, milliseconds, uid, packageName);
+
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (mVibrations) {
+ removeVibrationLocked(token);
+ doCancelVibrateLocked();
+ mCurrentVibration = vib;
+ startVibrationLocked(vib);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
}
@@ -199,7 +219,7 @@
return true;
}
- public void vibratePattern(long[] pattern, int repeat, IBinder token) {
+ public void vibratePattern(String packageName, long[] pattern, int repeat, IBinder token) {
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Requires VIBRATE permission");
@@ -224,7 +244,7 @@
return;
}
- Vibration vib = new Vibration(token, pattern, repeat, uid);
+ Vibration vib = new Vibration(token, pattern, repeat, uid, packageName);
try {
token.linkToDeath(vib, 0);
} catch (RemoteException e) {
@@ -291,11 +311,13 @@
}
doVibratorOff();
mH.removeCallbacks(mVibrationRunnable);
+ reportFinishVibrationLocked();
}
// Lock held on mVibrations
private void startNextVibrationLocked() {
if (mVibrations.size() <= 0) {
+ reportFinishVibrationLocked();
mCurrentVibration = null;
return;
}
@@ -305,8 +327,19 @@
// Lock held on mVibrations
private void startVibrationLocked(final Vibration vib) {
+ try {
+ int mode = mAppOpsService.startOperation(AppOpsManager.OP_VIBRATE, vib.mUid, vib.mPackageName);
+ if (mode != AppOpsManager.MODE_ALLOWED) {
+ if (mode == AppOpsManager.MODE_ERRORED) {
+ Slog.w(TAG, "Would be an error: vibrate from uid " + vib.mUid);
+ }
+ mH.post(mVibrationRunnable);
+ return;
+ }
+ } catch (RemoteException e) {
+ }
if (vib.mTimeout != 0) {
- doVibratorOn(vib.mTimeout);
+ doVibratorOn(vib.mTimeout, vib.mUid);
mH.postDelayed(mVibrationRunnable, vib.mTimeout);
} else {
// mThread better be null here. doCancelVibrate should always be
@@ -316,6 +349,17 @@
}
}
+ private void reportFinishVibrationLocked() {
+ if (mCurrentVibration != null) {
+ try {
+ mAppOpsService.finishOperation(AppOpsManager.OP_VIBRATE, mCurrentVibration.mUid,
+ mCurrentVibration.mPackageName);
+ } catch (RemoteException e) {
+ }
+ mCurrentVibration = null;
+ }
+ }
+
// Lock held on mVibrations
private Vibration removeVibrationLocked(IBinder token) {
ListIterator<Vibration> iter = mVibrations.listIterator(0);
@@ -413,8 +457,13 @@
return vibratorExists();
}
- private void doVibratorOn(long millis) {
+ private void doVibratorOn(long millis, int uid) {
synchronized (mInputDeviceVibrators) {
+ try {
+ mBatteryStatsService.noteVibratorOn(uid, millis);
+ mCurVibUid = uid;
+ } catch (RemoteException e) {
+ }
final int vibratorCount = mInputDeviceVibrators.size();
if (vibratorCount != 0) {
for (int i = 0; i < vibratorCount; i++) {
@@ -428,6 +477,13 @@
private void doVibratorOff() {
synchronized (mInputDeviceVibrators) {
+ if (mCurVibUid >= 0) {
+ try {
+ mBatteryStatsService.noteVibratorOff(mCurVibUid);
+ } catch (RemoteException e) {
+ }
+ mCurVibUid = -1;
+ }
final int vibratorCount = mInputDeviceVibrators.size();
if (vibratorCount != 0) {
for (int i = 0; i < vibratorCount; i++) {
@@ -470,10 +526,11 @@
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_DISPLAY);
synchronized (this) {
+ final long[] pattern = mVibration.mPattern;
+ final int len = pattern.length;
+ final int repeat = mVibration.mRepeat;
+ final int uid = mVibration.mUid;
int index = 0;
- long[] pattern = mVibration.mPattern;
- int len = pattern.length;
- int repeat = mVibration.mRepeat;
long duration = 0;
while (!mDone) {
@@ -493,7 +550,7 @@
// duration is saved for delay() at top of loop
duration = pattern[index++];
if (duration > 0) {
- VibratorService.this.doVibratorOn(duration);
+ VibratorService.this.doVibratorOn(duration, uid);
}
} else {
if (repeat < 0) {
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 1cd370a..b08fc28 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -21,6 +21,7 @@
import com.android.internal.R;
import com.android.internal.os.BatteryStatsImpl;
import com.android.internal.os.ProcessStats;
+import com.android.server.AppOpsService;
import com.android.server.AttributeCache;
import com.android.server.IntentResolver;
import com.android.server.ProcessMap;
@@ -28,6 +29,7 @@
import com.android.server.Watchdog;
import com.android.server.am.ActivityStack.ActivityState;
import com.android.server.pm.UserManagerService;
+import com.android.server.wm.AppTransition;
import com.android.server.wm.WindowManagerService;
import dalvik.system.Zygote;
@@ -130,7 +132,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
@@ -619,9 +620,14 @@
final BatteryStatsService mBatteryStatsService;
/**
- * information about component usage
+ * Information about component usage
*/
final UsageStatsService mUsageStatsService;
+
+ /**
+ * Information about and control over application operations
+ */
+ final AppOpsService mAppOpsService;
/**
* Current configuration information. HistoryRecord objects are given
@@ -1450,7 +1456,8 @@
m.mBatteryStatsService.publish(context);
m.mUsageStatsService.publish(context);
-
+ m.mAppOpsService.publish(context);
+
synchronized (thr) {
thr.mReady = true;
thr.notifyAll();
@@ -1613,9 +1620,10 @@
mOnBattery = DEBUG_POWER ? true
: mBatteryStatsService.getActiveStatistics().getIsOnBattery();
mBatteryStatsService.getActiveStatistics().setCallback(this);
-
+
mUsageStatsService = new UsageStatsService(new File(
systemDir, "usagestats").toString());
+ mAppOpsService = new AppOpsService();
mHeadless = "1".equals(SystemProperties.get("ro.config.headless", "0"));
// User 0 is the first and only user that runs at boot.
@@ -1970,9 +1978,9 @@
boolean isNextTransitionForward() {
int transit = mWindowManager.getPendingAppTransition();
- return transit == WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN
- || transit == WindowManagerPolicy.TRANSIT_TASK_OPEN
- || transit == WindowManagerPolicy.TRANSIT_TASK_TO_FRONT;
+ return transit == AppTransition.TRANSIT_ACTIVITY_OPEN
+ || transit == AppTransition.TRANSIT_TASK_OPEN
+ || transit == AppTransition.TRANSIT_TASK_TO_FRONT;
}
final ProcessRecord startProcessLocked(String processName,
@@ -7174,7 +7182,8 @@
}
}
}
-
+
+ mAppOpsService.shutdown();
mUsageStatsService.shutdown();
mBatteryStatsService.shutdown();
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index 0e01e4c..c1b10cf 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -22,6 +22,7 @@
import com.android.internal.app.HeavyWeightSwitcherActivity;
import com.android.internal.os.BatteryStatsImpl;
import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
+import com.android.server.wm.AppTransition;
import android.app.Activity;
import android.app.ActivityManager;
@@ -61,7 +62,6 @@
import android.util.Log;
import android.util.Slog;
import android.view.Display;
-import android.view.WindowManagerPolicy;
import java.io.IOException;
import java.lang.ref.WeakReference;
@@ -423,8 +423,8 @@
}
}
}
- };
-
+ }
+
ActivityStack(ActivityManagerService service, Context context, boolean mainStack, Looper looper) {
mHandler = new ActivityStackHandler(looper);
mService = service;
@@ -1612,11 +1612,11 @@
"Prepare close transition: prev=" + prev);
if (mNoAnimActivities.contains(prev)) {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, false);
+ AppTransition.TRANSIT_NONE, false);
} else {
mService.mWindowManager.prepareAppTransition(prev.task == next.task
- ? WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE
- : WindowManagerPolicy.TRANSIT_TASK_CLOSE, false);
+ ? AppTransition.TRANSIT_ACTIVITY_CLOSE
+ : AppTransition.TRANSIT_TASK_CLOSE, false);
}
mService.mWindowManager.setAppWillBeHidden(prev.appToken);
mService.mWindowManager.setAppVisibility(prev.appToken, false);
@@ -1626,11 +1626,11 @@
if (mNoAnimActivities.contains(next)) {
noAnim = true;
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, false);
+ AppTransition.TRANSIT_NONE, false);
} else {
mService.mWindowManager.prepareAppTransition(prev.task == next.task
- ? WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN
- : WindowManagerPolicy.TRANSIT_TASK_OPEN, false);
+ ? AppTransition.TRANSIT_ACTIVITY_OPEN
+ : AppTransition.TRANSIT_TASK_OPEN, false);
}
}
if (false) {
@@ -1643,10 +1643,10 @@
if (mNoAnimActivities.contains(next)) {
noAnim = true;
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, false);
+ AppTransition.TRANSIT_NONE, false);
} else {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN, false);
+ AppTransition.TRANSIT_ACTIVITY_OPEN, false);
}
}
if (!noAnim) {
@@ -1890,12 +1890,12 @@
"Prepare open transition: starting " + r);
if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, keepCurTransition);
+ AppTransition.TRANSIT_NONE, keepCurTransition);
mNoAnimActivities.add(r);
} else {
mService.mWindowManager.prepareAppTransition(newTask
- ? WindowManagerPolicy.TRANSIT_TASK_OPEN
- : WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN, keepCurTransition);
+ ? AppTransition.TRANSIT_TASK_OPEN
+ : AppTransition.TRANSIT_ACTIVITY_OPEN, keepCurTransition);
mNoAnimActivities.remove(r);
}
r.updateOptionsLocked(options);
@@ -3812,8 +3812,8 @@
if (DEBUG_TRANSITION) Slog.v(TAG,
"Prepare close transition: finishing " + r);
mService.mWindowManager.prepareAppTransition(endTask
- ? WindowManagerPolicy.TRANSIT_TASK_CLOSE
- : WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE, false);
+ ? AppTransition.TRANSIT_TASK_CLOSE
+ : AppTransition.TRANSIT_ACTIVITY_CLOSE, false);
// Tell window manager to prepare for this one to be removed.
mService.mWindowManager.setAppVisibility(r.appToken, false);
@@ -4300,7 +4300,7 @@
(reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
ActivityOptions.abort(options);
} else {
- updateTransitLocked(WindowManagerPolicy.TRANSIT_TASK_TO_FRONT, options);
+ updateTransitLocked(AppTransition.TRANSIT_TASK_TO_FRONT, options);
}
return;
}
@@ -4338,14 +4338,14 @@
if (reason != null &&
(reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, false);
+ AppTransition.TRANSIT_NONE, false);
ActivityRecord r = topRunningActivityLocked(null);
if (r != null) {
mNoAnimActivities.add(r);
}
ActivityOptions.abort(options);
} else {
- updateTransitLocked(WindowManagerPolicy.TRANSIT_TASK_TO_FRONT, options);
+ updateTransitLocked(AppTransition.TRANSIT_TASK_TO_FRONT, options);
}
mService.mWindowManager.moveAppTokensToTop(moved);
@@ -4431,14 +4431,14 @@
if (reason != null &&
(reason.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_ANIMATION) != 0) {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_NONE, false);
+ AppTransition.TRANSIT_NONE, false);
ActivityRecord r = topRunningActivityLocked(null);
if (r != null) {
mNoAnimActivities.add(r);
}
} else {
mService.mWindowManager.prepareAppTransition(
- WindowManagerPolicy.TRANSIT_TASK_TO_BACK, false);
+ AppTransition.TRANSIT_TASK_TO_BACK, false);
}
mService.mWindowManager.moveAppTokensToBottom(moved);
if (VALIDATE_TOKENS) {
diff --git a/services/java/com/android/server/am/BatteryStatsService.java b/services/java/com/android/server/am/BatteryStatsService.java
index ab20208..d19c7f6 100644
--- a/services/java/com/android/server/am/BatteryStatsService.java
+++ b/services/java/com/android/server/am/BatteryStatsService.java
@@ -144,6 +144,20 @@
}
}
+ public void noteVibratorOn(int uid, long durationMillis) {
+ enforceCallingPermission();
+ synchronized (mStats) {
+ mStats.noteVibratorOnLocked(uid, durationMillis);
+ }
+ }
+
+ public void noteVibratorOff(int uid) {
+ enforceCallingPermission();
+ synchronized (mStats) {
+ mStats.noteVibratorOffLocked(uid);
+ }
+ }
+
public void noteStartGps(int uid) {
enforceCallingPermission();
synchronized (mStats) {
diff --git a/services/java/com/android/server/location/GeocoderProxy.java b/services/java/com/android/server/location/GeocoderProxy.java
index f5cc59f..cdbfcbc 100644
--- a/services/java/com/android/server/location/GeocoderProxy.java
+++ b/services/java/com/android/server/location/GeocoderProxy.java
@@ -20,6 +20,7 @@
import android.location.Address;
import android.location.GeocoderParams;
import android.location.IGeocodeProvider;
+import android.os.Handler;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
@@ -39,8 +40,8 @@
private final ServiceWatcher mServiceWatcher;
public static GeocoderProxy createAndBind(Context context,
- List<String> initialPackageNames, int userId) {
- GeocoderProxy proxy = new GeocoderProxy(context, initialPackageNames, userId);
+ List<String> initialPackageNames, Handler handler, int userId) {
+ GeocoderProxy proxy = new GeocoderProxy(context, initialPackageNames, handler, userId);
if (proxy.bind()) {
return proxy;
} else {
@@ -48,11 +49,12 @@
}
}
- public GeocoderProxy(Context context, List<String> initialPackageNames, int userId) {
+ public GeocoderProxy(Context context, List<String> initialPackageNames, Handler handler,
+ int userId) {
mContext = context;
mServiceWatcher = new ServiceWatcher(mContext, TAG, SERVICE_ACTION, initialPackageNames,
- null, null, userId);
+ null, handler, userId);
}
private boolean bind () {
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java
index efba10d..f1739d5 100644
--- a/services/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/java/com/android/server/location/GpsLocationProvider.java
@@ -17,6 +17,7 @@
package com.android.server.location;
import android.app.AlarmManager;
+import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -40,6 +41,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
import android.os.RemoteException;
@@ -55,6 +57,8 @@
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;
import android.util.NtpTrustedTime;
+
+import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IBatteryStats;
import com.android.internal.location.GpsNetInitiatedHandler;
import com.android.internal.location.ProviderProperties;
@@ -304,6 +308,7 @@
private final PendingIntent mWakeupIntent;
private final PendingIntent mTimeoutIntent;
+ private final IAppOpsService mAppOpsService;
private final IBatteryStats mBatteryStats;
// only modified on handler thread
@@ -413,7 +418,8 @@
return native_is_supported();
}
- public GpsLocationProvider(Context context, ILocationManager ilocationManager) {
+ public GpsLocationProvider(Context context, ILocationManager ilocationManager,
+ Looper looper) {
mContext = context;
mNtpTime = NtpTrustedTime.getInstance(context);
mILocationManager = ilocationManager;
@@ -432,6 +438,10 @@
mConnMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ // App ops service to keep track of who is accessing the GPS
+ mAppOpsService = IAppOpsService.Stub.asInterface(ServiceManager.getService(
+ Context.APP_OPS_SERVICE));
+
// Battery statistics service to be notified when GPS turns on or off
mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));
@@ -466,7 +476,7 @@
}
// construct handler, listen for events
- mHandler = new ProviderHandler();
+ mHandler = new ProviderHandler(looper);
listenForBroadcasts();
// also listen for PASSIVE_PROVIDER updates
@@ -861,6 +871,7 @@
}
if (newUid) {
try {
+ mAppOpsService.startOperation(AppOpsManager.OP_GPS, uid1, null);
mBatteryStats.noteStartGps(uid1);
} catch (RemoteException e) {
Log.w(TAG, "RemoteException", e);
@@ -880,6 +891,7 @@
if (oldUid) {
try {
mBatteryStats.noteStopGps(uid1);
+ mAppOpsService.finishOperation(AppOpsManager.OP_GPS, uid1, null);
} catch (RemoteException e) {
Log.w(TAG, "RemoteException", e);
}
@@ -1488,8 +1500,8 @@
}
private final class ProviderHandler extends Handler {
- public ProviderHandler() {
- super(true /*async*/);
+ public ProviderHandler(Looper looper) {
+ super(looper, null, true /*async*/);
}
@Override
diff --git a/services/java/com/android/server/location/LocationProviderProxy.java b/services/java/com/android/server/location/LocationProviderProxy.java
index dd2e71c..cec77a8 100644
--- a/services/java/com/android/server/location/LocationProviderProxy.java
+++ b/services/java/com/android/server/location/LocationProviderProxy.java
@@ -25,7 +25,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
-import android.os.UserHandle;
import android.os.WorkSource;
import android.util.Log;
diff --git a/services/java/com/android/server/pm/Installer.java b/services/java/com/android/server/pm/Installer.java
index e96820f..02a2c1b 100644
--- a/services/java/com/android/server/pm/Installer.java
+++ b/services/java/com/android/server/pm/Installer.java
@@ -188,12 +188,7 @@
}
}
- /**
- * @param restrictHomeDir if {@code true}, installd will create the application's
- * home directory with {@code 0700} permissions. If false, {@code 0751} will
- * be used instead.
- */
- public int install(String name, int uid, int gid, boolean restrictHomeDir) {
+ public int install(String name, int uid, int gid) {
StringBuilder builder = new StringBuilder("install");
builder.append(' ');
builder.append(name);
@@ -201,8 +196,6 @@
builder.append(uid);
builder.append(' ');
builder.append(gid);
- builder.append(' ');
- builder.append(restrictHomeDir);
return execute(builder.toString());
}
@@ -270,12 +263,7 @@
return execute(builder.toString());
}
- /**
- * @param restrictHomeDir if {@code true}, installd will create the application's
- * home directory with {@code 0700} permissions. If false, {@code 0751} will
- * be used instead.
- */
- public int createUserData(String name, int uid, int userId, boolean restrictHomeDir) {
+ public int createUserData(String name, int uid, int userId) {
StringBuilder builder = new StringBuilder("mkuserdata");
builder.append(' ');
builder.append(name);
@@ -283,8 +271,6 @@
builder.append(uid);
builder.append(' ');
builder.append(userId);
- builder.append(' ');
- builder.append(restrictHomeDir);
return execute(builder.toString());
}
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index aa2b461..2238f17 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -24,6 +24,7 @@
import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
import static com.android.internal.util.ArrayUtils.appendInt;
import static com.android.internal.util.ArrayUtils.removeInt;
+import static libcore.io.OsConstants.S_ISLNK;
import static libcore.io.OsConstants.S_IRWXU;
import static libcore.io.OsConstants.S_IRGRP;
import static libcore.io.OsConstants.S_IXGRP;
@@ -110,6 +111,7 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.Environment.UserEnvironment;
+import android.provider.Settings.Secure;
import android.security.SystemKeyStore;
import android.util.DisplayMetrics;
import android.util.EventLog;
@@ -146,11 +148,13 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import libcore.io.ErrnoException;
import libcore.io.IoUtils;
import libcore.io.Libcore;
+import libcore.io.OsConstants;
import libcore.io.StructStat;
/**
@@ -3578,17 +3582,16 @@
}
}
- private int createDataDirsLI(String packageName, int uid, int targetSdkVersion) {
+ private int createDataDirsLI(String packageName, int uid) {
int[] users = sUserManager.getUserIds();
- boolean restrictHomeDir = (targetSdkVersion >= Build.VERSION_CODES.K);
- int res = mInstaller.install(packageName, uid, uid, restrictHomeDir);
+ int res = mInstaller.install(packageName, uid, uid);
if (res < 0) {
return res;
}
for (int user : users) {
if (user != 0) {
res = mInstaller.createUserData(packageName,
- UserHandle.getUid(user, uid), user, restrictHomeDir);
+ UserHandle.getUid(user, uid), user);
if (res < 0) {
return res;
}
@@ -3982,8 +3985,7 @@
recovered = true;
// And now re-install the app.
- ret = createDataDirsLI(pkgName, pkg.applicationInfo.uid,
- pkg.applicationInfo.targetSdkVersion);
+ ret = createDataDirsLI(pkgName, pkg.applicationInfo.uid);
if (ret == -1) {
// Ack should not happen!
msg = prefix + pkg.packageName
@@ -4028,9 +4030,8 @@
if ((parseFlags & PackageParser.PARSE_CHATTY) != 0)
Log.v(TAG, "Want this data dir: " + dataPath);
}
- // invoke installer to do the actual installation
- int ret = createDataDirsLI(pkgName, pkg.applicationInfo.uid,
- pkg.applicationInfo.targetSdkVersion);
+ //invoke installer to do the actual installation
+ int ret = createDataDirsLI(pkgName, pkg.applicationInfo.uid);
if (ret < 0) {
// Error from installer
mLastScanError = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
diff --git a/services/java/com/android/server/pm/Settings.java b/services/java/com/android/server/pm/Settings.java
index f791a6e..06f11bc 100644
--- a/services/java/com/android/server/pm/Settings.java
+++ b/services/java/com/android/server/pm/Settings.java
@@ -25,6 +25,7 @@
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.JournaledFile;
import com.android.internal.util.XmlUtils;
+import com.android.server.IntentResolver;
import com.android.server.pm.PackageManagerService.DumpState;
import org.xmlpull.v1.XmlPullParser;
@@ -45,7 +46,6 @@
import android.content.pm.PackageUserState;
import android.content.pm.VerifierDeviceIdentity;
import android.os.Binder;
-import android.os.Build;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Process;
@@ -2335,11 +2335,9 @@
for (PackageSetting ps : mPackages.values()) {
// Only system apps are initially installed.
ps.setInstalled((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0, userHandle);
- boolean restrictHomeDir = (ps.pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.K);
// Need to create a data directory for all apps under this user.
installer.createUserData(ps.name,
- UserHandle.getUid(userHandle, ps.appId), userHandle,
- restrictHomeDir);
+ UserHandle.getUid(userHandle, ps.appId), userHandle);
}
readDefaultPreferredAppsLPw(userHandle);
writePackageRestrictionsLPr(userHandle);
diff --git a/services/java/com/android/server/wm/AppTransition.java b/services/java/com/android/server/wm/AppTransition.java
index 7736c93..30019e7 100644
--- a/services/java/com/android/server/wm/AppTransition.java
+++ b/services/java/com/android/server/wm/AppTransition.java
@@ -16,7 +16,6 @@
package com.android.server.wm;
-import android.app.ActivityOptions;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Point;
@@ -25,7 +24,6 @@
import android.os.IRemoteCallback;
import android.util.Slog;
import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
@@ -39,8 +37,26 @@
import java.io.PrintWriter;
-import static android.view.WindowManagerPolicy.TRANSIT_NONE;
-import static android.view.WindowManagerPolicy.TRANSIT_UNSET;
+import static com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation;
+import static com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation;
// State management of app transitions. When we are preparing for a
// transition, mNextAppTransition will be the kind of transition to
@@ -53,32 +69,81 @@
WindowManagerService.DEBUG_APP_TRANSITIONS;
private static final boolean DEBUG_ANIM = WindowManagerService.DEBUG_ANIM;
+ /** Bit mask that is set for all enter transition. */
+ public static final int TRANSIT_ENTER_MASK = 0x1000;
+
+ /** Bit mask that is set for all exit transitions. */
+ public static final int TRANSIT_EXIT_MASK = 0x2000;
+
+ /** Not set up for a transition. */
+ public static final int TRANSIT_UNSET = -1;
+ /** No animation for transition. */
+ public static final int TRANSIT_NONE = 0;
+ /** A window in a new activity is being opened on top of an existing one in the same task. */
+ public static final int TRANSIT_ACTIVITY_OPEN = 6 | TRANSIT_ENTER_MASK;
+ /** The window in the top-most activity is being closed to reveal the
+ * previous activity in the same task. */
+ public static final int TRANSIT_ACTIVITY_CLOSE = 7 | TRANSIT_EXIT_MASK;
+ /** A window in a new task is being opened on top of an existing one
+ * in another activity's task. */
+ public static final int TRANSIT_TASK_OPEN = 8 | TRANSIT_ENTER_MASK;
+ /** A window in the top-most activity is being closed to reveal the
+ * previous activity in a different task. */
+ public static final int TRANSIT_TASK_CLOSE = 9 | TRANSIT_EXIT_MASK;
+ /** A window in an existing task is being displayed on top of an existing one
+ * in another activity's task. */
+ public static final int TRANSIT_TASK_TO_FRONT = 10 | TRANSIT_ENTER_MASK;
+ /** A window in an existing task is being put below all other tasks. */
+ public static final int TRANSIT_TASK_TO_BACK = 11 | TRANSIT_EXIT_MASK;
+ /** A window in a new activity that doesn't have a wallpaper is being opened on top of one that
+ * does, effectively closing the wallpaper. */
+ public static final int TRANSIT_WALLPAPER_CLOSE = 12 | TRANSIT_EXIT_MASK;
+ /** A window in a new activity that does have a wallpaper is being opened on one that didn't,
+ * effectively opening the wallpaper. */
+ public static final int TRANSIT_WALLPAPER_OPEN = 13 | TRANSIT_ENTER_MASK;
+ /** A window in a new activity is being opened on top of an existing one, and both are on top
+ * of the wallpaper. */
+ public static final int TRANSIT_WALLPAPER_INTRA_OPEN = 14 | TRANSIT_ENTER_MASK;
+ /** The window in the top-most activity is being closed to reveal the previous activity, and
+ * both are on top of the wallpaper. */
+ public static final int TRANSIT_WALLPAPER_INTRA_CLOSE = 15 | TRANSIT_EXIT_MASK;
+
/** Fraction of animation at which the recents thumbnail becomes completely transparent */
- static final float RECENTS_THUMBNAIL_FADEOUT_FRACTION = 0.25f;
+ private static final float RECENTS_THUMBNAIL_FADEOUT_FRACTION = 0.25f;
- static final long DEFAULT_APP_TRANSITION_DURATION = 250;
+ private static final long DEFAULT_APP_TRANSITION_DURATION = 250;
- final Context mContext;
- final Handler mH;
+ private final Context mContext;
+ private final Handler mH;
- int mNextAppTransition = TRANSIT_UNSET;
- int mNextAppTransitionType = ActivityOptions.ANIM_NONE;
- String mNextAppTransitionPackage;
- Bitmap mNextAppTransitionThumbnail;
+ private int mNextAppTransition = TRANSIT_UNSET;
+
+ private static final int NEXT_TRANSIT_TYPE_NONE = 0;
+ private static final int NEXT_TRANSIT_TYPE_CUSTOM = 1;
+ private static final int NEXT_TRANSIT_TYPE_SCALE_UP = 2;
+ private static final int NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP = 3;
+ private static final int NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN = 4;
+ private int mNextAppTransitionType = NEXT_TRANSIT_TYPE_NONE;
+
+ private String mNextAppTransitionPackage;
+ private Bitmap mNextAppTransitionThumbnail;
// Used for thumbnail transitions. True if we're scaling up, false if scaling down
- boolean mNextAppTransitionScaleUp;
- IRemoteCallback mNextAppTransitionCallback;
- int mNextAppTransitionEnter;
- int mNextAppTransitionExit;
- int mNextAppTransitionStartX;
- int mNextAppTransitionStartY;
- int mNextAppTransitionStartWidth;
- int mNextAppTransitionStartHeight;
- boolean mAppTransitionReady = false;
- boolean mAppTransitionRunning = false;
- boolean mAppTransitionTimeout = false;
+ private boolean mNextAppTransitionScaleUp;
+ private IRemoteCallback mNextAppTransitionCallback;
+ private int mNextAppTransitionEnter;
+ private int mNextAppTransitionExit;
+ private int mNextAppTransitionStartX;
+ private int mNextAppTransitionStartY;
+ private int mNextAppTransitionStartWidth;
+ private int mNextAppTransitionStartHeight;
- final int mConfigShortAnimTime;
+ private final static int APP_STATE_IDLE = 0;
+ private final static int APP_STATE_READY = 1;
+ private final static int APP_STATE_RUNNING = 2;
+ private final static int APP_STATE_TIMEOUT = 3;
+ private int mAppTransitionState = APP_STATE_IDLE;
+
+ private final int mConfigShortAnimTime;
private final Interpolator mDecelerateInterpolator;
private final Interpolator mThumbnailFadeoutInterpolator;
@@ -122,27 +187,28 @@
}
boolean isReady() {
- return mAppTransitionReady;
+ return mAppTransitionState == APP_STATE_READY
+ || mAppTransitionState == APP_STATE_TIMEOUT;
}
void setReady() {
- mAppTransitionReady = true;
+ mAppTransitionState = APP_STATE_READY;
}
boolean isRunning() {
- return mAppTransitionRunning;
+ return mAppTransitionState == APP_STATE_RUNNING;
}
- void setRunning(boolean running) {
- mAppTransitionRunning = running;
+ void setIdle() {
+ mAppTransitionState = APP_STATE_IDLE;
}
boolean isTimeout() {
- return mAppTransitionTimeout;
+ return mAppTransitionState == APP_STATE_TIMEOUT;
}
- void setTimeout(boolean timeout) {
- mAppTransitionTimeout = timeout;
+ void setTimeout() {
+ mAppTransitionState = APP_STATE_TIMEOUT;
}
Bitmap getNextAppTransitionThumbnail() {
@@ -154,28 +220,29 @@
outPoint.y = mNextAppTransitionStartY;
}
- int getType() {
- return mNextAppTransitionType;
- }
-
void prepare() {
- mAppTransitionReady = false;
- mAppTransitionTimeout = false;
+ if (!isRunning()) {
+ mAppTransitionState = APP_STATE_IDLE;
+ }
}
void goodToGo() {
- mNextAppTransition = WindowManagerPolicy.TRANSIT_UNSET;
- mAppTransitionReady = false;
- mAppTransitionRunning = true;
- mAppTransitionTimeout = false;
+ mNextAppTransition = TRANSIT_UNSET;
+ mAppTransitionState = APP_STATE_RUNNING;
}
void clear() {
- mNextAppTransitionType = ActivityOptions.ANIM_NONE;
+ mNextAppTransitionType = NEXT_TRANSIT_TYPE_NONE;
mNextAppTransitionPackage = null;
mNextAppTransitionThumbnail = null;
}
+ void freeze() {
+ setAppTransition(AppTransition.TRANSIT_UNSET);
+ clear();
+ setReady();
+ }
+
private AttributeCache.Entry getCachedAnimations(WindowManager.LayoutParams lp) {
if (DEBUG_ANIM) Slog.v(TAG, "Loading animations: layout params pkg="
+ (lp != null ? lp.packageName : null)
@@ -282,8 +349,8 @@
set.addAnimation(alpha);
set.setDetachWallpaper(true);
a = set;
- } else if (transit == WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN ||
- transit == WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_CLOSE) {
+ } else if (transit == TRANSIT_WALLPAPER_INTRA_OPEN ||
+ transit == TRANSIT_WALLPAPER_INTRA_CLOSE) {
// If we are on top of the wallpaper, we need an animation that
// correctly handles the wallpaper staying static behind all of
// the animated elements. To do this, will just have the existing
@@ -300,8 +367,8 @@
// task transition duration.
final long duration;
switch (transit) {
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
- case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
+ case TRANSIT_ACTIVITY_OPEN:
+ case TRANSIT_ACTIVITY_CLOSE:
duration = mConfigShortAnimTime;
break;
default:
@@ -363,7 +430,7 @@
} else {
// Exiting app
if (mNextAppTransitionScaleUp) {
- if (transit == WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN) {
+ if (transit == TRANSIT_WALLPAPER_INTRA_OPEN) {
// Fade out while bringing up selected activity. This keeps the
// current activity from showing through a launching wallpaper
// activity.
@@ -394,8 +461,8 @@
// task transition duration.
final long duration;
switch (transit) {
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
- case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
+ case TRANSIT_ACTIVITY_OPEN:
+ case TRANSIT_ACTIVITY_CLOSE:
duration = mConfigShortAnimTime;
break;
default:
@@ -413,7 +480,7 @@
Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter,
int appWidth, int appHeight) {
Animation a;
- if (mNextAppTransitionType == ActivityOptions.ANIM_CUSTOM) {
+ if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_CUSTOM) {
a = loadAnimation(mNextAppTransitionPackage, enter ?
mNextAppTransitionEnter : mNextAppTransitionExit);
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
@@ -421,17 +488,17 @@
+ " anim=" + a + " nextAppTransition=ANIM_CUSTOM"
+ " transit=" + transit + " isEntrance=" + enter
+ " Callers=" + Debug.getCallers(3));
- } else if (mNextAppTransitionType == ActivityOptions.ANIM_SCALE_UP) {
+ } else if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_SCALE_UP) {
a = createScaleUpAnimationLocked(transit, enter, appWidth, appHeight);
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
"applyAnimation:"
+ " anim=" + a + " nextAppTransition=ANIM_SCALE_UP"
+ " transit=" + transit + " isEntrance=" + enter
+ " Callers=" + Debug.getCallers(3));
- } else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_UP ||
- mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN) {
+ } else if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP ||
+ mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN) {
mNextAppTransitionScaleUp =
- (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_SCALE_UP);
+ (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP);
a = createThumbnailAnimationLocked(transit, enter, false, appWidth, appHeight);
if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
String animName = mNextAppTransitionScaleUp ?
@@ -444,55 +511,55 @@
} else {
int animAttr = 0;
switch (transit) {
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
+ case TRANSIT_ACTIVITY_OPEN:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation;
+ ? WindowAnimation_activityOpenEnterAnimation
+ : WindowAnimation_activityOpenExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
+ case TRANSIT_ACTIVITY_CLOSE:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation;
+ ? WindowAnimation_activityCloseEnterAnimation
+ : WindowAnimation_activityCloseExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_TASK_OPEN:
+ case TRANSIT_TASK_OPEN:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation;
+ ? WindowAnimation_taskOpenEnterAnimation
+ : WindowAnimation_taskOpenExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_TASK_CLOSE:
+ case TRANSIT_TASK_CLOSE:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation;
+ ? WindowAnimation_taskCloseEnterAnimation
+ : WindowAnimation_taskCloseExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_TASK_TO_FRONT:
+ case TRANSIT_TASK_TO_FRONT:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation;
+ ? WindowAnimation_taskToFrontEnterAnimation
+ : WindowAnimation_taskToFrontExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_TASK_TO_BACK:
+ case TRANSIT_TASK_TO_BACK:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation;
+ ? WindowAnimation_taskToBackEnterAnimation
+ : WindowAnimation_taskToBackExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_OPEN:
+ case TRANSIT_WALLPAPER_OPEN:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation;
+ ? WindowAnimation_wallpaperOpenEnterAnimation
+ : WindowAnimation_wallpaperOpenExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE:
+ case TRANSIT_WALLPAPER_CLOSE:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation;
+ ? WindowAnimation_wallpaperCloseEnterAnimation
+ : WindowAnimation_wallpaperCloseExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN:
+ case TRANSIT_WALLPAPER_INTRA_OPEN:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
+ ? WindowAnimation_wallpaperIntraOpenEnterAnimation
+ : WindowAnimation_wallpaperIntraOpenExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_CLOSE:
+ case TRANSIT_WALLPAPER_INTRA_CLOSE:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation;
+ ? WindowAnimation_wallpaperIntraCloseEnterAnimation
+ : WindowAnimation_wallpaperIntraCloseExitAnimation;
break;
}
a = animAttr != 0 ? loadAnimation(lp, animAttr) : null;
@@ -516,7 +583,7 @@
void overridePendingAppTransition(String packageName, int enterAnim, int exitAnim,
IRemoteCallback startedCallback) {
if (isTransitionSet()) {
- mNextAppTransitionType = ActivityOptions.ANIM_CUSTOM;
+ mNextAppTransitionType = NEXT_TRANSIT_TYPE_CUSTOM;
mNextAppTransitionPackage = packageName;
mNextAppTransitionThumbnail = null;
mNextAppTransitionEnter = enterAnim;
@@ -531,7 +598,7 @@
void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
int startHeight) {
if (isTransitionSet()) {
- mNextAppTransitionType = ActivityOptions.ANIM_SCALE_UP;
+ mNextAppTransitionType = NEXT_TRANSIT_TYPE_SCALE_UP;
mNextAppTransitionPackage = null;
mNextAppTransitionThumbnail = null;
mNextAppTransitionStartX = startX;
@@ -546,8 +613,8 @@
void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY,
IRemoteCallback startedCallback, boolean scaleUp) {
if (isTransitionSet()) {
- mNextAppTransitionType = scaleUp ? ActivityOptions.ANIM_THUMBNAIL_SCALE_UP
- : ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN;
+ mNextAppTransitionType = scaleUp ? NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP
+ : NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN;
mNextAppTransitionPackage = null;
mNextAppTransitionThumbnail = srcThumb;
mNextAppTransitionScaleUp = scaleUp;
@@ -565,17 +632,100 @@
return "mNextAppTransition=0x" + Integer.toHexString(mNextAppTransition);
}
+ /**
+ * Returns the human readable name of a window transition.
+ *
+ * @param transition The window transition.
+ * @return The transition symbolic name.
+ */
+ public static String appTransitionToString(int transition) {
+ switch (transition) {
+ case TRANSIT_UNSET: {
+ return "TRANSIT_UNSET";
+ }
+ case TRANSIT_NONE: {
+ return "TRANSIT_NONE";
+ }
+ case TRANSIT_EXIT_MASK: {
+ return "TRANSIT_EXIT_MASK";
+ }
+ case TRANSIT_ACTIVITY_OPEN: {
+ return "TRANSIT_ACTIVITY_OPEN";
+ }
+ case TRANSIT_ACTIVITY_CLOSE: {
+ return "TRANSIT_ACTIVITY_CLOSE";
+ }
+ case TRANSIT_TASK_OPEN: {
+ return "TRANSIT_TASK_OPEN";
+ }
+ case TRANSIT_TASK_CLOSE: {
+ return "TRANSIT_TASK_CLOSE";
+ }
+ case TRANSIT_TASK_TO_FRONT: {
+ return "TRANSIT_TASK_TO_FRONT";
+ }
+ case TRANSIT_TASK_TO_BACK: {
+ return "TRANSIT_TASK_TO_BACK";
+ }
+ case TRANSIT_WALLPAPER_CLOSE: {
+ return "TRANSIT_WALLPAPER_CLOSE";
+ }
+ case TRANSIT_WALLPAPER_OPEN: {
+ return "TRANSIT_WALLPAPER_OPEN";
+ }
+ case TRANSIT_WALLPAPER_INTRA_OPEN: {
+ return "TRANSIT_WALLPAPER_INTRA_OPEN";
+ }
+ case TRANSIT_WALLPAPER_INTRA_CLOSE: {
+ return "TRANSIT_WALLPAPER_INTRA_CLOSE";
+ }
+ default: {
+ return "<UNKNOWN>";
+ }
+ }
+ }
+
+ private String appStateToString() {
+ switch (mAppTransitionState) {
+ case APP_STATE_IDLE:
+ return "APP_STATE_IDLE";
+ case APP_STATE_READY:
+ return "APP_STATE_READY";
+ case APP_STATE_RUNNING:
+ return "APP_STATE_RUNNING";
+ case APP_STATE_TIMEOUT:
+ return "APP_STATE_TIMEOUT";
+ default:
+ return "unknown state=" + mAppTransitionState;
+ }
+ }
+
+ private String transitTypeToString() {
+ switch (mNextAppTransitionType) {
+ case NEXT_TRANSIT_TYPE_NONE:
+ return "NEXT_TRANSIT_TYPE_NONE";
+ case NEXT_TRANSIT_TYPE_CUSTOM:
+ return "NEXT_TRANSIT_TYPE_CUSTOM";
+ case NEXT_TRANSIT_TYPE_SCALE_UP:
+ return "NEXT_TRANSIT_TYPE_SCALE_UP";
+ case NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP:
+ return "NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP";
+ case NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN:
+ return "NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN";
+ default:
+ return "unknown type=" + mNextAppTransitionType;
+ }
+ }
+
@Override
public void dump(PrintWriter pw) {
pw.print(" " + this);
- pw.print(" mAppTransitionReady="); pw.println(mAppTransitionReady);
- pw.print(" mAppTransitionRunning="); pw.print(mAppTransitionRunning);
- pw.print(" mAppTransitionTimeout="); pw.println(mAppTransitionTimeout);
- if (mNextAppTransitionType != ActivityOptions.ANIM_NONE) {
- pw.print(" mNextAppTransitionType="); pw.println(mNextAppTransitionType);
+ pw.print(" mAppTransitionState="); pw.println(appStateToString());
+ if (mNextAppTransitionType != NEXT_TRANSIT_TYPE_NONE) {
+ pw.print(" mNextAppTransitionType="); pw.println(transitTypeToString());
}
switch (mNextAppTransitionType) {
- case ActivityOptions.ANIM_CUSTOM:
+ case NEXT_TRANSIT_TYPE_CUSTOM:
pw.print(" mNextAppTransitionPackage=");
pw.println(mNextAppTransitionPackage);
pw.print(" mNextAppTransitionEnter=0x");
@@ -583,7 +733,7 @@
pw.print(" mNextAppTransitionExit=0x");
pw.println(Integer.toHexString(mNextAppTransitionExit));
break;
- case ActivityOptions.ANIM_SCALE_UP:
+ case NEXT_TRANSIT_TYPE_SCALE_UP:
pw.print(" mNextAppTransitionStartX="); pw.print(mNextAppTransitionStartX);
pw.print(" mNextAppTransitionStartY=");
pw.println(mNextAppTransitionStartY);
@@ -592,8 +742,8 @@
pw.print(" mNextAppTransitionStartHeight=");
pw.println(mNextAppTransitionStartHeight);
break;
- case ActivityOptions.ANIM_THUMBNAIL_SCALE_UP:
- case ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN:
+ case NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP:
+ case NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN:
pw.print(" mNextAppTransitionThumbnail=");
pw.print(mNextAppTransitionThumbnail);
pw.print(" mNextAppTransitionStartX=");
diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java
index adad09d..0ada604 100644
--- a/services/java/com/android/server/wm/AppWindowToken.java
+++ b/services/java/com/android/server/wm/AppWindowToken.java
@@ -225,7 +225,6 @@
boolean isVisible() {
final int N = allAppWindows.size();
- // TODO: Consider using allDrawn instead of a single window.
for (int i=0; i<N; i++) {
WindowState win = allAppWindows.get(i);
if (!win.mAppFreezing
diff --git a/services/java/com/android/server/wm/DimAnimator.java b/services/java/com/android/server/wm/DimAnimator.java
deleted file mode 100644
index 5874202..0000000
--- a/services/java/com/android/server/wm/DimAnimator.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import android.content.res.Resources;
-import android.graphics.PixelFormat;
-import android.util.Slog;
-import android.util.TypedValue;
-import android.view.Surface;
-import android.view.SurfaceSession;
-
-import java.io.PrintWriter;
-
-/**
- * DimAnimator class that controls the dim animation. This holds the surface and
- * all state used for dim animation.
- */
-class DimAnimator {
- static final String TAG = "DimAnimator";
-
- Surface mDimSurface;
- boolean mDimShown = false;
- float mDimCurrentAlpha;
- float mDimTargetAlpha;
- float mDimDeltaPerMs;
- long mLastDimAnimTime;
-
- int mLastDimWidth, mLastDimHeight;
-
- DimAnimator (SurfaceSession session, final int layerStack) {
- try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
- mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
- "DimAnimator",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- } else {
- mDimSurface = new Surface(session, "DimAnimator",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- }
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
- " DIM " + mDimSurface + ": CREATE");
- mDimSurface.setLayerStack(layerStack);
- mDimSurface.setAlpha(0.0f);
- mDimSurface.show();
- } catch (Exception e) {
- Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
- }
- }
-
- /**
- * Set's the dim surface's layer and update dim parameters that will be used in
- * {@link #updateSurface} after all windows are examined.
- */
- void updateParameters(final Resources res, final Parameters params, final long currentTime) {
- if (mDimSurface == null) {
- Slog.e(TAG, "updateParameters: no Surface");
- return;
- }
-
- // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
- // corner.
- final int dw = (int) (params.mDimWidth * 1.5);
- final int dh = (int) (params.mDimHeight * 1.5);
- final WindowStateAnimator winAnimator = params.mDimWinAnimator;
- final float target = params.mDimTarget;
- if (!mDimShown) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
- " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + dw + "x" + dh + ")");
- mDimShown = true;
- try {
- mLastDimWidth = dw;
- mLastDimHeight = dh;
- // back off position so mDimXXX/4 is before and mDimXXX/4 is after
- mDimSurface.setPosition(-1 * dw / 6, -1 * dh /6);
- mDimSurface.setSize(dw, dh);
- mDimSurface.show();
- } catch (RuntimeException e) {
- Slog.w(WindowManagerService.TAG, "Failure showing dim surface", e);
- }
- } else if (mLastDimWidth != dw || mLastDimHeight != dh) {
- mLastDimWidth = dw;
- mLastDimHeight = dh;
- mDimSurface.setSize(dw, dh);
- // back off position so mDimXXX/4 is before and mDimXXX/4 is after
- mDimSurface.setPosition(-1 * dw / 6, -1 * dh /6);
- }
-
- mDimSurface.setLayer(winAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM);
-
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM "
- + mDimSurface + ": layer=" + (winAnimator.mAnimLayer-1) + " target=" + target);
- if (mDimTargetAlpha != target) {
- // If the desired dim level has changed, then
- // start an animation to it.
- mLastDimAnimTime = currentTime;
- long duration = (winAnimator.mAnimating && winAnimator.mAnimation != null)
- ? winAnimator.mAnimation.computeDurationHint()
- : WindowManagerService.DEFAULT_DIM_DURATION;
- if (target > mDimTargetAlpha) {
- TypedValue tv = new TypedValue();
- res.getValue(com.android.internal.R.fraction.config_dimBehindFadeDuration,
- tv, true);
- if (tv.type == TypedValue.TYPE_FRACTION) {
- duration = (long)tv.getFraction(duration, duration);
- } else if (tv.type >= TypedValue.TYPE_FIRST_INT
- && tv.type <= TypedValue.TYPE_LAST_INT) {
- duration = tv.data;
- }
- }
- if (duration < 1) {
- // Don't divide by zero
- duration = 1;
- }
- mDimTargetAlpha = target;
- mDimDeltaPerMs = (mDimTargetAlpha-mDimCurrentAlpha) / duration;
- }
- }
-
- /**
- * Updating the surface's alpha. Returns true if the animation continues, or returns
- * false when the animation is finished and the dim surface is hidden.
- */
- boolean updateSurface(boolean dimming, long currentTime, boolean displayFrozen) {
- if (mDimSurface == null) {
- Slog.e(TAG, "updateSurface: no Surface");
- return false;
- }
-
- if (!dimming) {
- if (mDimTargetAlpha != 0) {
- mLastDimAnimTime = currentTime;
- mDimTargetAlpha = 0;
- mDimDeltaPerMs = (-mDimCurrentAlpha) / WindowManagerService.DEFAULT_DIM_DURATION;
- }
- }
-
- boolean animating = mLastDimAnimTime != 0;
- if (animating) {
- mDimCurrentAlpha += mDimDeltaPerMs
- * (currentTime-mLastDimAnimTime);
- if (displayFrozen) {
- // If the display is frozen, there is no reason to animate.
- animating = false;
- } else if (mDimDeltaPerMs > 0) {
- if (mDimCurrentAlpha > mDimTargetAlpha) {
- animating = false;
- }
- } else if (mDimDeltaPerMs < 0) {
- if (mDimCurrentAlpha < mDimTargetAlpha) {
- animating = false;
- }
- } else {
- animating = false;
- }
-
- // Do we need to continue animating?
- if (animating) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM "
- + mDimSurface + ": alpha=" + mDimCurrentAlpha);
- mLastDimAnimTime = currentTime;
- mDimSurface.setAlpha(mDimCurrentAlpha);
- } else {
- mDimCurrentAlpha = mDimTargetAlpha;
- mLastDimAnimTime = 0;
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM "
- + mDimSurface + ": final alpha=" + mDimCurrentAlpha);
- mDimSurface.setAlpha(mDimCurrentAlpha);
- if (!dimming) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface
- + ": HIDE");
- try {
- mDimSurface.hide();
- } catch (RuntimeException e) {
- Slog.w(WindowManagerService.TAG, "Illegal argument exception hiding dim surface");
- }
- mDimShown = false;
- }
- }
- }
- return animating;
- }
-
- public void kill() {
- if (mDimSurface != null) {
- mDimSurface.destroy();
- mDimSurface = null;
- }
- }
-
- public void printTo(String prefix, PrintWriter pw) {
- pw.print(prefix);
- pw.print("mDimSurface="); pw.print(mDimSurface);
- pw.print(" "); pw.print(mLastDimWidth); pw.print(" x ");
- pw.println(mLastDimHeight);
- pw.print(prefix);
- pw.print("mDimShown="); pw.print(mDimShown);
- pw.print(" current="); pw.print(mDimCurrentAlpha);
- pw.print(" target="); pw.print(mDimTargetAlpha);
- pw.print(" delta="); pw.print(mDimDeltaPerMs);
- pw.print(" lastAnimTime="); pw.println(mLastDimAnimTime);
- }
-
- static class Parameters {
- final WindowStateAnimator mDimWinAnimator;
- final int mDimWidth;
- final int mDimHeight;
- final float mDimTarget;
- Parameters(final WindowStateAnimator dimWinAnimator, final int dimWidth,
- final int dimHeight, final float dimTarget) {
- mDimWinAnimator = dimWinAnimator;
- mDimWidth = dimWidth;
- mDimHeight = dimHeight;
- mDimTarget = dimTarget;
- }
-
- Parameters(Parameters o) {
- mDimWinAnimator = o.mDimWinAnimator;
- mDimWidth = o.mDimWidth;
- mDimHeight = o.mDimHeight;
- mDimTarget = o.mDimTarget;
- }
-
- public void printTo(String prefix, PrintWriter pw) {
- pw.print(prefix);
- pw.print("mDimWinAnimator="); pw.print(mDimWinAnimator.mWin.mAttrs.getTitle());
- pw.print(" "); pw.print(mDimWidth); pw.print(" x ");
- pw.print(mDimHeight);
- pw.print(" mDimTarget="); pw.println(mDimTarget);
- }
- }
-}
diff --git a/services/java/com/android/server/wm/DimLayer.java b/services/java/com/android/server/wm/DimLayer.java
new file mode 100644
index 0000000..4c7add9
--- /dev/null
+++ b/services/java/com/android/server/wm/DimLayer.java
@@ -0,0 +1,257 @@
+// Copyright 2012 Google Inc. All Rights Reserved.
+
+package com.android.server.wm;
+
+import android.graphics.PixelFormat;
+import android.os.SystemClock;
+import android.util.Slog;
+import android.view.DisplayInfo;
+import android.view.Surface;
+
+import java.io.PrintWriter;
+
+public class DimLayer {
+ private static final String TAG = "DimLayer";
+ private static final boolean DEBUG = false;
+
+ /** Reference to the owner of this object. */
+ final DisplayContent mDisplayContent;
+
+ /** Actual surface that dims */
+ Surface mDimSurface;
+
+ /** Last value passed to mDimSurface.setAlpha() */
+ float mAlpha = 0;
+
+ /** Last value passed to mDimSurface.setLayer() */
+ int mLayer = -1;
+
+ /** Last values passed to mDimSurface.setSize() */
+ int mLastDimWidth, mLastDimHeight;
+
+ /** True after mDimSurface.show() has been called, false after mDimSurface.hide(). */
+ private boolean mShowing = false;
+
+ /** Value of mAlpha when beginning transition to mTargetAlpha */
+ float mStartAlpha = 0;
+
+ /** Final value of mAlpha following transition */
+ float mTargetAlpha = 0;
+
+ /** Time in units of SystemClock.uptimeMillis() at which the current transition started */
+ long mStartTime;
+
+ /** Time in milliseconds to take to transition from mStartAlpha to mTargetAlpha */
+ long mDuration;
+
+ DimLayer(WindowManagerService service, int displayId) {
+ if (DEBUG) Slog.v(TAG, "Ctor: displayId=" + displayId);
+ mDisplayContent = service.getDisplayContentLocked(displayId);
+ Surface.openTransaction();
+ try {
+ if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ mDimSurface = new WindowStateAnimator.SurfaceTrace(service.mFxSession,
+ "DimSurface",
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
+ } else {
+ mDimSurface = new Surface(service.mFxSession, TAG,
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
+ }
+ if (WindowManagerService.SHOW_TRANSACTIONS ||
+ WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(TAG,
+ " DIM " + mDimSurface + ": CREATE");
+ mDimSurface.setLayerStack(displayId);
+ } catch (Exception e) {
+ Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
+ } finally {
+ Surface.closeTransaction();
+ }
+ }
+
+ /** Return true if dim layer is showing */
+ boolean isDimming() {
+ return mTargetAlpha != 0;
+ }
+
+ /** Return true if in a transition period */
+ boolean isAnimating() {
+ return mTargetAlpha != mAlpha;
+ }
+
+ float getTargetAlpha() {
+ return mTargetAlpha;
+ }
+
+ private void setAlpha(float alpha) {
+ if (mAlpha != alpha) {
+ if (DEBUG) Slog.v(TAG, "setAlpha alpha=" + alpha);
+ try {
+ mDimSurface.setAlpha(alpha);
+ if (alpha == 0 && mShowing) {
+ if (DEBUG) Slog.v(TAG, "setAlpha hiding");
+ mDimSurface.hide();
+ mShowing = false;
+ } else if (alpha > 0 && !mShowing) {
+ if (DEBUG) Slog.v(TAG, "setAlpha showing");
+ mDimSurface.show();
+ mShowing = true;
+ }
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting alpha immediately", e);
+ }
+ mAlpha = alpha;
+ }
+ }
+
+ /**
+ * @param duration The time to test.
+ * @return True if the duration would lead to an earlier end to the current animation.
+ */
+ private boolean durationEndsEarlier(long duration) {
+ return SystemClock.uptimeMillis() + duration < mStartTime + mDuration;
+ }
+
+ /** Jump to the end of the animation.
+ * NOTE: Must be called with Surface transaction open. */
+ void show() {
+ if (isAnimating()) {
+ if (DEBUG) Slog.v(TAG, "show: immediate");
+ show(mLayer, mTargetAlpha, 0);
+ }
+ }
+
+ /**
+ * Begin an animation to a new dim value.
+ * NOTE: Must be called with Surface transaction open.
+ *
+ * @param layer The layer to set the surface to.
+ * @param alpha The dim value to end at.
+ * @param duration How long to take to get there in milliseconds.
+ */
+ void show(int layer, float alpha, long duration) {
+ if (DEBUG) Slog.v(TAG, "show: layer=" + layer + " alpha=" + alpha
+ + " duration=" + duration);
+ if (mDimSurface == null) {
+ Slog.e(TAG, "show: no Surface");
+ // Make sure isAnimating() returns false.
+ mTargetAlpha = mAlpha = 0;
+ return;
+ }
+
+ // Set surface size to screen size.
+ final DisplayInfo info = mDisplayContent.getDisplayInfo();
+ // Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
+ // corner.
+ final int dw = (int) (info.logicalWidth * 1.5);
+ final int dh = (int) (info.logicalHeight * 1.5);
+ // back off position so 1/4 of Surface is before and 1/4 is after.
+ final float xPos = -1 * dw / 6;
+ final float yPos = -1 * dh / 6;
+
+ if (mLastDimWidth != dw || mLastDimHeight != dh || mLayer != layer) {
+ try {
+ mDimSurface.setPosition(xPos, yPos);
+ mDimSurface.setSize(dw, dh);
+ mDimSurface.setLayer(layer);
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Failure setting size or layer", e);
+ }
+ mLastDimWidth = dw;
+ mLastDimHeight = dh;
+ mLayer = layer;
+ }
+
+ long curTime = SystemClock.uptimeMillis();
+ final boolean animating = isAnimating();
+ if ((animating && (mTargetAlpha != alpha || durationEndsEarlier(duration)))
+ || (!animating && mAlpha != alpha)) {
+ if (duration <= 0) {
+ // No animation required, just set values.
+ setAlpha(alpha);
+ } else {
+ // Start or continue animation with new parameters.
+ mStartAlpha = mAlpha;
+ mStartTime = curTime;
+ mDuration = duration;
+ }
+ }
+ if (DEBUG) Slog.v(TAG, "show: mStartAlpha=" + mStartAlpha + " mStartTime=" + mStartTime);
+ mTargetAlpha = alpha;
+ }
+
+ /** Immediate hide.
+ * NOTE: Must be called with Surface transaction open. */
+ void hide() {
+ if (mShowing) {
+ if (DEBUG) Slog.v(TAG, "hide: immediate");
+ hide(0);
+ }
+ }
+
+ /**
+ * Gradually fade to transparent.
+ * NOTE: Must be called with Surface transaction open.
+ *
+ * @param duration Time to fade in milliseconds.
+ */
+ void hide(long duration) {
+ if (mShowing && (mTargetAlpha != 0 || durationEndsEarlier(duration))) {
+ if (DEBUG) Slog.v(TAG, "hide: duration=" + duration);
+ show(mLayer, 0, duration);
+ }
+ }
+
+ /**
+ * Advance the dimming per the last #show(int, float, long) call.
+ * NOTE: Must be called with Surface transaction open.
+ *
+ * @return True if animation is still required after this step.
+ */
+ boolean stepAnimation() {
+ if (mDimSurface == null) {
+ Slog.e(TAG, "stepAnimation: null Surface");
+ // Ensure that isAnimating() returns false;
+ mTargetAlpha = mAlpha = 0;
+ return false;
+ }
+
+ if (isAnimating()) {
+ final long curTime = SystemClock.uptimeMillis();
+ final float alphaDelta = mTargetAlpha - mStartAlpha;
+ float alpha = mStartAlpha + alphaDelta * (curTime - mStartTime) / mDuration;
+ if (alphaDelta > 0 && alpha > mTargetAlpha ||
+ alphaDelta < 0 && alpha < mTargetAlpha) {
+ // Don't exceed limits.
+ alpha = mTargetAlpha;
+ }
+ if (DEBUG) Slog.v(TAG, "stepAnimation: curTime=" + curTime + " alpha=" + alpha);
+ setAlpha(alpha);
+ }
+
+ return isAnimating();
+ }
+
+ /** Cleanup */
+ void destroySurface() {
+ if (DEBUG) Slog.v(TAG, "destroySurface.");
+ if (mDimSurface != null) {
+ mDimSurface.destroy();
+ mDimSurface = null;
+ }
+ }
+
+ public void printTo(String prefix, PrintWriter pw) {
+ pw.print(prefix); pw.print("mDimSurface="); pw.println(mDimSurface);
+ pw.print(prefix); pw.print(" mLayer="); pw.print(mLayer);
+ pw.print(" mAlpha="); pw.println(mAlpha);
+ pw.print(prefix); pw.print("mLastDimWidth="); pw.print(mLastDimWidth);
+ pw.print(" mLastDimWidth="); pw.println(mLastDimWidth);
+ pw.print(prefix); pw.print("Last animation: mStartTime="); pw.print(mStartTime);
+ pw.print(" mDuration="); pw.print(mDuration);
+ pw.print(" curTime="); pw.println(SystemClock.uptimeMillis());
+ pw.print(" mStartAlpha="); pw.println(mStartAlpha);
+ pw.print(" mTargetAlpha="); pw.print(mTargetAlpha);
+ }
+}
diff --git a/services/java/com/android/server/wm/DimSurface.java b/services/java/com/android/server/wm/DimSurface.java
deleted file mode 100644
index 511d388..0000000
--- a/services/java/com/android/server/wm/DimSurface.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.wm;
-
-import android.graphics.PixelFormat;
-import android.util.Slog;
-import android.view.DisplayInfo;
-import android.view.Surface;
-import android.view.SurfaceSession;
-
-import java.io.PrintWriter;
-
-class DimSurface {
- static final String TAG = "DimSurface";
-
- Surface mDimSurface;
- boolean mDimShown = false;
- int mDimColor = 0;
- int mLayer = -1;
- int mLastDimWidth, mLastDimHeight;
- final DisplayContent mDisplayContent;
-
- DimSurface(SurfaceSession session, DisplayContent displayContent) {
- mDisplayContent = displayContent;
- final int layerStack = displayContent.getDisplayId();
- try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
- mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
- "DimSurface",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- } else {
- mDimSurface = new Surface(session, "DimSurface",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- }
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
- " DIM " + mDimSurface + ": CREATE");
- mDimSurface.setLayerStack(layerStack);
- mDimSurface.setAlpha(0.0f);
- mDimSurface.show();
- } catch (Exception e) {
- Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
- }
- }
-
- /**
- * Show the dim surface.
- */
- void show(int layer, int color) {
- final DisplayInfo info = mDisplayContent.getDisplayInfo();
- final int dw = info.logicalWidth;
- final int dh = info.logicalHeight;
- if (mDimSurface == null) {
- Slog.e(TAG, "show: no Surface");
- return;
- }
-
- if (!mDimShown) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" +
- dw + "x" + dh + " layer=" + layer + ")");
- mDimShown = true;
- try {
- mLastDimWidth = dw;
- mLastDimHeight = dh;
- mDimSurface.setPosition(0, 0);
- mDimSurface.setSize(dw, dh);
- mDimSurface.setLayer(layer);
- mDimSurface.show();
- } catch (RuntimeException e) {
- Slog.w(WindowManagerService.TAG, "Failure showing dim surface", e);
- }
- } else if (mLastDimWidth != dw || mLastDimHeight != dh || mDimColor != color
- || mLayer != layer) {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": pos=(0,0) (" +
- dw + "x" + dh + " layer=" + layer + ")");
- mLastDimWidth = dw;
- mLastDimHeight = dh;
- mLayer = layer;
- mDimColor = color;
- mDimSurface.setSize(dw, dh);
- mDimSurface.setLayer(layer);
- mDimSurface.setAlpha(((color>>24)&0xff)/255.0f);
- }
- }
-
- void hide() {
- if (mDimSurface == null) {
- Slog.e(TAG, "hide: no Surface");
- return;
- }
-
- if (mDimShown) {
- mDimShown = false;
- try {
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " HIDE " + mDimSurface);
- mDimSurface.hide();
- } catch (RuntimeException e) {
- Slog.w(WindowManagerService.TAG, "Illegal argument exception hiding dim surface");
- }
- }
- }
-
- void kill() {
- if (mDimSurface != null) {
- mDimSurface.destroy();
- mDimSurface = null;
- }
- }
-
- public void printTo(String prefix, PrintWriter pw) {
- pw.print(prefix); pw.print("mDimSurface="); pw.println(mDimSurface);
- pw.print(prefix); pw.print("mDimShown="); pw.print(mDimShown);
- pw.print(" mLayer="); pw.print(mLayer);
- pw.print(" mDimColor=0x"); pw.println(Integer.toHexString(mDimColor));
- pw.print(prefix); pw.print("mLastDimWidth="); pw.print(mLastDimWidth);
- pw.print(" mLastDimWidth="); pw.println(mLastDimWidth);
- }
-}
diff --git a/services/java/com/android/server/wm/DisplayMagnifier.java b/services/java/com/android/server/wm/DisplayMagnifier.java
index cd5ae4b..d3c01f0 100644
--- a/services/java/com/android/server/wm/DisplayMagnifier.java
+++ b/services/java/com/android/server/wm/DisplayMagnifier.java
@@ -50,7 +50,6 @@
import com.android.internal.R;
import com.android.internal.os.SomeArgs;
-import com.android.internal.policy.impl.PhoneWindowManager;
/**
* This class is a part of the window manager and encapsulates the
@@ -137,25 +136,34 @@
mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_ROTATION_CHANGED);
}
- public void onWindowTransitionLocked(WindowState windowState, int transition) {
+ public void onAppWindowTransitionLocked(WindowState windowState, int transition) {
if (DEBUG_WINDOW_TRANSITIONS) {
Slog.i(LOG_TAG, "Window transition: "
- + PhoneWindowManager.windowTransitionToString(transition)
+ + AppTransition.appTransitionToString(transition)
+ " displayId: " + windowState.getDisplayId());
}
final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
if (magnifying) {
switch (transition) {
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
- case WindowManagerPolicy.TRANSIT_TASK_OPEN:
- case WindowManagerPolicy.TRANSIT_TASK_TO_FRONT:
- case WindowManagerPolicy.TRANSIT_WALLPAPER_OPEN:
- case WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE:
- case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN: {
+ case AppTransition.TRANSIT_ACTIVITY_OPEN:
+ case AppTransition.TRANSIT_TASK_OPEN:
+ case AppTransition.TRANSIT_TASK_TO_FRONT:
+ case AppTransition.TRANSIT_WALLPAPER_OPEN:
+ case AppTransition.TRANSIT_WALLPAPER_CLOSE:
+ case AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN: {
mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_USER_CONTEXT_CHANGED);
}
}
}
+ }
+
+ public void onWindowTransitionLocked(WindowState windowState, int transition) {
+ if (DEBUG_WINDOW_TRANSITIONS) {
+ Slog.i(LOG_TAG, "Window transition: "
+ + AppTransition.appTransitionToString(transition)
+ + " displayId: " + windowState.getDisplayId());
+ }
+ final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
final int type = windowState.mAttrs.type;
switch (transition) {
case WindowManagerPolicy.TRANSIT_ENTER:
@@ -459,7 +467,6 @@
private static final int MIN_ALPHA = 0;
private static final int MAX_ALPHA = 255;
- private final Point mTempPoint = new Point();
private final Region mBounds = new Region();
private final Rect mDirtyRect = new Rect();
private final Paint mPaint = new Paint();
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index a9f3c0f..d5144fb 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -19,6 +19,7 @@
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.util.TimeUtils;
+import android.util.TypedValue;
import android.view.Display;
import android.view.Surface;
import android.view.WindowManagerPolicy;
@@ -37,6 +38,10 @@
public class WindowAnimator {
private static final String TAG = "WindowAnimator";
+ /** Amount of time in milliseconds to animate the dim surface from one value to another,
+ * when no window animation is driving it. */
+ static final int DEFAULT_DIM_DURATION = 200;
+
final WindowManagerService mService;
final Context mContext;
final WindowManagerPolicy mPolicy;
@@ -115,7 +120,7 @@
final DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId);
if (displayAnimator != null) {
if (displayAnimator.mWindowAnimationBackgroundSurface != null) {
- displayAnimator.mWindowAnimationBackgroundSurface.kill();
+ displayAnimator.mWindowAnimationBackgroundSurface.destroySurface();
displayAnimator.mWindowAnimationBackgroundSurface = null;
}
if (displayAnimator.mScreenRotationAnimation != null) {
@@ -123,7 +128,7 @@
displayAnimator.mScreenRotationAnimation = null;
}
if (displayAnimator.mDimAnimator != null) {
- displayAnimator.mDimAnimator.kill();
+ displayAnimator.mDimAnimator.destroySurface();
displayAnimator.mDimAnimator = null;
}
}
@@ -359,8 +364,6 @@
WindowStateAnimator windowAnimationBackground = null;
int windowAnimationBackgroundColor = 0;
WindowState detachedWallpaper = null;
- final DimSurface windowAnimationBackgroundSurface =
- displayAnimator.mWindowAnimationBackgroundSurface;
for (int i = windows.size() - 1; i >= 0; i--) {
final WindowState win = windows.get(i);
@@ -440,15 +443,11 @@
}
}
- if (windowAnimationBackgroundSurface != null) {
- windowAnimationBackgroundSurface.show(
- animLayer - WindowManagerService.LAYER_OFFSET_DIM,
- windowAnimationBackgroundColor);
- }
+ displayAnimator.mWindowAnimationBackgroundSurface.show(
+ animLayer - WindowManagerService.LAYER_OFFSET_DIM,
+ ((windowAnimationBackgroundColor >> 24) & 0xff) / 255f, 0);
} else {
- if (windowAnimationBackgroundSurface != null) {
- windowAnimationBackgroundSurface.hide();
- }
+ displayAnimator.mWindowAnimationBackgroundSurface.hide();
}
}
@@ -499,8 +498,19 @@
updateWallpaperLocked(displayId);
}
- // TODO(cmautner): Change the following comment when no longer locked on mWindowMap */
- /** Locked on mService.mWindowMap and this. */
+ private long getDimBehindFadeDuration(long duration) {
+ TypedValue tv = new TypedValue();
+ mContext.getResources().getValue(
+ com.android.internal.R.fraction.config_dimBehindFadeDuration, tv, true);
+ if (tv.type == TypedValue.TYPE_FRACTION) {
+ duration = (long)tv.getFraction(duration, duration);
+ } else if (tv.type >= TypedValue.TYPE_FIRST_INT && tv.type <= TypedValue.TYPE_LAST_INT) {
+ duration = tv.data;
+ }
+ return duration;
+ }
+
+ /** Locked on mService.mWindowMap. */
private void animateLocked() {
if (!mInitialized) {
return;
@@ -561,15 +571,38 @@
screenRotationAnimation.updateSurfacesInTransaction();
}
- final DimAnimator.Parameters dimParams = displayAnimator.mDimParams;
- final DimAnimator dimAnimator = displayAnimator.mDimAnimator;
- if (dimAnimator != null && dimParams != null) {
- dimAnimator.updateParameters(mContext.getResources(), dimParams, mCurrentTime);
+ final DimLayer dimAnimator = displayAnimator.mDimAnimator;
+ final WindowStateAnimator winAnimator = displayAnimator.mDimWinAnimator;
+ final float dimAmount;
+ if (winAnimator == null) {
+ dimAmount = 0;
+ } else {
+ dimAmount = winAnimator.mWin.mAttrs.dimAmount;
}
- if (dimAnimator != null && dimAnimator.mDimShown) {
- mAnimating |= dimAnimator.updateSurface(isDimmingLocked(displayId),
- mCurrentTime, !mService.okToDisplay());
+ final float targetAlpha = dimAnimator.getTargetAlpha();
+ if (targetAlpha != dimAmount) {
+ if (winAnimator == null) {
+ dimAnimator.hide(DEFAULT_DIM_DURATION);
+ } else {
+ long duration = (winAnimator.mAnimating && winAnimator.mAnimation != null)
+ ? winAnimator.mAnimation.computeDurationHint()
+ : DEFAULT_DIM_DURATION;
+ if (targetAlpha > dimAmount) {
+ duration = getDimBehindFadeDuration(duration);
+ }
+ dimAnimator.show(winAnimator.mAnimLayer -
+ WindowManagerService.LAYER_OFFSET_DIM, dimAmount, duration);
+ }
}
+ if (dimAnimator.isAnimating()) {
+ if (!mService.okToDisplay()) {
+ // Jump to the end of the animation.
+ dimAnimator.show();
+ } else {
+ mAnimating |= dimAnimator.stepAnimation();
+ }
+ }
+
//TODO (multidisplay): Magnification is supported only for the default display.
if (mService.mDisplayMagnifier != null && displayId == Display.DEFAULT_DISPLAY) {
mService.mDisplayMagnifier.drawMagnifiedRegionBorderIfNeededLocked();
@@ -628,13 +661,18 @@
}
boolean isDimmingLocked(int displayId) {
- return getDisplayContentsAnimatorLocked(displayId).mDimParams != null;
+ return getDisplayContentsAnimatorLocked(displayId).mDimAnimator.isDimming();
}
boolean isDimmingLocked(final WindowStateAnimator winAnimator) {
- DimAnimator.Parameters dimParams =
- getDisplayContentsAnimatorLocked(winAnimator.mWin.getDisplayId()).mDimParams;
- return dimParams != null && dimParams.mDimWinAnimator == winAnimator;
+ final int displayId = winAnimator.mWin.getDisplayId();
+ DisplayContentsAnimator displayAnimator =
+ getDisplayContentsAnimatorLocked(displayId);
+ if (displayAnimator != null) {
+ return displayAnimator.mDimWinAnimator == winAnimator
+ && displayAnimator.mDimAnimator.isDimming();
+ }
+ return false;
}
static String bulkUpdateParamsToString(int bulkUpdateParams) {
@@ -675,24 +713,16 @@
pw.print(": "); pw.println(wanim);
}
if (displayAnimator.mWindowAnimationBackgroundSurface != null) {
- if (dumpAll || displayAnimator.mWindowAnimationBackgroundSurface.mDimShown) {
+ if (dumpAll || displayAnimator.mWindowAnimationBackgroundSurface.isDimming()) {
pw.print(subPrefix); pw.println("mWindowAnimationBackgroundSurface:");
displayAnimator.mWindowAnimationBackgroundSurface.printTo(subSubPrefix, pw);
}
}
- if (displayAnimator.mDimAnimator != null) {
- if (dumpAll || displayAnimator.mDimAnimator.mDimShown) {
- pw.print(subPrefix); pw.println("mDimAnimator:");
- displayAnimator.mDimAnimator.printTo(subSubPrefix, pw);
- }
- } else if (dumpAll) {
- pw.print(subPrefix); pw.println("no DimAnimator ");
- }
- if (displayAnimator.mDimParams != null) {
- pw.print(subPrefix); pw.println("mDimParams:");
- displayAnimator.mDimParams.printTo(subSubPrefix, pw);
- } else if (dumpAll) {
- pw.print(subPrefix); pw.println("no DimParams ");
+ if (dumpAll || displayAnimator.mDimAnimator.isDimming()) {
+ pw.print(subPrefix); pw.println("mDimAnimator:");
+ displayAnimator.mDimAnimator.printTo(subSubPrefix, pw);
+ pw.print(subPrefix); pw.print("mDimWinAnimator=");
+ pw.println(displayAnimator.mDimWinAnimator);
}
if (displayAnimator.mScreenRotationAnimation != null) {
pw.print(subPrefix); pw.println("mScreenRotationAnimation:");
@@ -751,23 +781,18 @@
}
}
- void setDimParamsLocked(int displayId, DimAnimator.Parameters dimParams) {
+ void setDimWinAnimatorLocked(int displayId, WindowStateAnimator newWinAnimator) {
DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId);
- if (dimParams == null) {
- displayAnimator.mDimParams = null;
+ if (newWinAnimator == null) {
+ displayAnimator.mDimWinAnimator = null;
} else {
- final WindowStateAnimator newWinAnimator = dimParams.mDimWinAnimator;
-
// Only set dim params on the highest dimmed layer.
- final WindowStateAnimator existingDimWinAnimator =
- displayAnimator.mDimParams == null ?
- null : displayAnimator.mDimParams.mDimWinAnimator;
- // Don't turn on for an unshown surface, or for any layer but the highest
- // dimmed layer.
+ final WindowStateAnimator existingDimWinAnimator = displayAnimator.mDimWinAnimator;
+ // Don't turn on for an unshown surface, or for any layer but the highest dimmed layer.
if (newWinAnimator.mSurfaceShown && (existingDimWinAnimator == null
|| !existingDimWinAnimator.mSurfaceShown
|| existingDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) {
- displayAnimator.mDimParams = new DimAnimator.Parameters(dimParams);
+ displayAnimator.mDimWinAnimator = newWinAnimator;
}
}
}
@@ -790,15 +815,14 @@
}
private class DisplayContentsAnimator {
- DimAnimator mDimAnimator = null;
- DimAnimator.Parameters mDimParams = null;
- DimSurface mWindowAnimationBackgroundSurface = null;
+ DimLayer mDimAnimator = null;
+ WindowStateAnimator mDimWinAnimator = null;
+ DimLayer mWindowAnimationBackgroundSurface = null;
ScreenRotationAnimation mScreenRotationAnimation = null;
public DisplayContentsAnimator(int displayId) {
- mDimAnimator = new DimAnimator(mService.mFxSession, displayId);
- mWindowAnimationBackgroundSurface = new DimSurface(mService.mFxSession,
- mService.getDisplayContentLocked(displayId));
+ mDimAnimator = new DimLayer(mService, displayId);
+ mWindowAnimationBackgroundSurface = new DimLayer(mService, displayId);
}
}
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index c67a465..dd99322 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -250,11 +250,6 @@
*/
static final int MAX_ANIMATION_DURATION = 10*1000;
- /** Amount of time (in milliseconds) to animate the dim surface from one
- * value to another, when no window animation is driving it.
- */
- static final int DEFAULT_DIM_DURATION = 200;
-
/** Amount of time (in milliseconds) to animate the fade-in-out transition for
* compatible windows.
*/
@@ -324,6 +319,7 @@
/**
* Mapping from an IWindow IBinder to the server's Window object.
* This is also used as the lock for all of our state.
+ * NOTE: Never call into methods that lock ActivityManagerService while holding this object.
*/
final HashMap<IBinder, WindowState> mWindowMap = new HashMap<IBinder, WindowState>();
@@ -1113,7 +1109,6 @@
}
}
- /** TODO(cmautner): Is this the same as {@link WindowState#canReceiveKeys()} */
static boolean canBeImeTarget(WindowState w) {
final int fl = w.mAttrs.flags
& (FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM);
@@ -1969,12 +1964,7 @@
winAnimator.computeShownFrameLocked();
// No need to lay out the windows - we can just set the wallpaper position
// directly.
- // TODO(cmautner): Don't move this from here, just lock the WindowAnimator.
- if (winAnimator.mSurfaceX != wallpaper.mShownFrame.left
- || winAnimator.mSurfaceY != wallpaper.mShownFrame.top) {
- winAnimator.setWallpaperOffset((int) wallpaper.mShownFrame.left,
- (int) wallpaper.mShownFrame.top);
- }
+ winAnimator.setWallpaperOffset(wallpaper.mShownFrame);
// We only want to be synchronous with one wallpaper.
sync = false;
}
@@ -2478,19 +2468,13 @@
}
}
- // TODO(cmautner): Move to WindowStateAnimator.
- void setTransparentRegionHint(final WindowStateAnimator winAnimator, final Region region) {
- mH.sendMessage(mH.obtainMessage(H.SET_TRANSPARENT_REGION,
- new Pair<WindowStateAnimator, Region>(winAnimator, region)));
- }
-
void setTransparentRegionWindow(Session session, IWindow client, Region region) {
long origId = Binder.clearCallingIdentity();
try {
synchronized (mWindowMap) {
WindowState w = windowForClientLocked(session, client, false);
if ((w != null) && w.mHasSurface) {
- setTransparentRegionHint(w.mWinAnimator, region);
+ w.mWinAnimator.setTransparentRegionHintLocked(region);
}
}
} finally {
@@ -2652,7 +2636,6 @@
long origId = Binder.clearCallingIdentity();
synchronized(mWindowMap) {
- // TODO(cmautner): synchronize on mAnimator or win.mWinAnimator.
WindowState win = windowForClientLocked(session, client, false);
if (win == null) {
return 0;
@@ -2973,18 +2956,21 @@
public void finishDrawingWindow(Session session, IWindow client) {
final long origId = Binder.clearCallingIdentity();
- synchronized (mWindowMap) {
- WindowState win = windowForClientLocked(session, client, false);
- if (win != null && win.mWinAnimator.finishDrawingLocked()) {
- if ((win.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
- getDefaultDisplayContentLocked().pendingLayoutChanges |=
- WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+ try {
+ synchronized (mWindowMap) {
+ WindowState win = windowForClientLocked(session, client, false);
+ if (win != null && win.mWinAnimator.finishDrawingLocked()) {
+ if ((win.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
+ getDefaultDisplayContentLocked().pendingLayoutChanges |=
+ WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
+ }
+ win.mDisplayContent.layoutNeeded = true;
+ requestTraversalLocked();
}
- win.mDisplayContent.layoutNeeded = true;
- performLayoutAndPlaceSurfacesLocked();
}
+ } finally {
+ Binder.restoreCallingIdentity(origId);
}
- Binder.restoreCallingIdentity(origId);
}
@Override
@@ -3622,14 +3608,14 @@
if (!mAppTransition.isTransitionSet() || mAppTransition.isTransitionNone()) {
mAppTransition.setAppTransition(transit);
} else if (!alwaysKeepCurrent) {
- if (transit == WindowManagerPolicy.TRANSIT_TASK_OPEN
+ if (transit == AppTransition.TRANSIT_TASK_OPEN
&& mAppTransition.isTransitionEqual(
- WindowManagerPolicy.TRANSIT_TASK_CLOSE)) {
+ AppTransition.TRANSIT_TASK_CLOSE)) {
// Opening a new task always supersedes a close for the anim.
mAppTransition.setAppTransition(transit);
- } else if (transit == WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN
+ } else if (transit == AppTransition.TRANSIT_ACTIVITY_OPEN
&& mAppTransition.isTransitionEqual(
- WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE)) {
+ AppTransition.TRANSIT_ACTIVITY_CLOSE)) {
// Opening a new activity always supersedes a close for the anim.
mAppTransition.setAppTransition(transit);
}
@@ -3948,7 +3934,7 @@
boolean runningAppAnimation = false;
- if (transit != WindowManagerPolicy.TRANSIT_UNSET) {
+ if (transit != AppTransition.TRANSIT_UNSET) {
if (wtoken.mAppAnimator.animation == AppWindowAnimator.sDummyAnimation) {
wtoken.mAppAnimator.animation = null;
}
@@ -3959,7 +3945,7 @@
//TODO (multidisplay): Magnification is supported only for the default display.
if (window != null && mDisplayMagnifier != null
&& window.getDisplayId() == Display.DEFAULT_DISPLAY) {
- mDisplayMagnifier.onWindowTransitionLocked(window, transit);
+ mDisplayMagnifier.onAppWindowTransitionLocked(window, transit);
}
changed = true;
}
@@ -4127,7 +4113,7 @@
}
final long origId = Binder.clearCallingIdentity();
- setTokenVisibilityLocked(wtoken, null, visible, WindowManagerPolicy.TRANSIT_UNSET,
+ setTokenVisibilityLocked(wtoken, null, visible, AppTransition.TRANSIT_UNSET,
true);
wtoken.updateReportedVisibilityLocked();
Binder.restoreCallingIdentity(origId);
@@ -4259,7 +4245,7 @@
if (basewtoken != null && (wtoken=basewtoken.appWindowToken) != null) {
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Removing app token: " + wtoken);
delayed = setTokenVisibilityLocked(wtoken, null, false,
- WindowManagerPolicy.TRANSIT_UNSET, true);
+ AppTransition.TRANSIT_UNSET, true);
wtoken.inPendingTransaction = false;
mOpeningApps.remove(wtoken);
wtoken.waitingToShow = false;
@@ -4812,6 +4798,7 @@
mH.sendEmptyMessage(H.PERSIST_ANIMATION_SCALE);
}
+ @Override
public void setAnimationScales(float[] scales) {
if (!checkCallingPermission(android.Manifest.permission.SET_ANIMATION_SCALE,
"setAnimationScale()")) {
@@ -4839,6 +4826,7 @@
ValueAnimator.setDurationScale(scale);
}
+ @Override
public float getAnimationScale(int which) {
switch (which) {
case 0: return mWindowAnimationScale;
@@ -4848,6 +4836,7 @@
return 0;
}
+ @Override
public float[] getAnimationScales() {
return new float[] { mWindowAnimationScale, mTransitionAnimationScale,
mAnimatorDurationScale };
@@ -6621,12 +6610,6 @@
public static final int CLIENT_FREEZE_TIMEOUT = 30;
- public static final int ANIMATOR_WHAT_OFFSET = 100000;
- public static final int SET_TRANSPARENT_REGION = ANIMATOR_WHAT_OFFSET + 1;
-
- public H() {
- }
-
@Override
public void handleMessage(Message msg) {
if (DEBUG_WINDOW_TRACE) {
@@ -6878,10 +6861,8 @@
case APP_TRANSITION_TIMEOUT: {
synchronized (mWindowMap) {
if (mAppTransition.isTransitionSet()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "*** APP TRANSITION TIMEOUT");
- mAppTransition.setReady();
- mAppTransition.setTimeout(true);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** APP TRANSITION TIMEOUT");
+ mAppTransition.setTimeout();
mAnimatingAppTokens.clear();
mAnimatingAppTokens.addAll(mAppTokens);
performLayoutAndPlaceSurfacesLocked();
@@ -7030,15 +7011,6 @@
break;
}
- // Animation messages. Move to Window{State}Animator
- case SET_TRANSPARENT_REGION: {
- Pair<WindowStateAnimator, Region> pair =
- (Pair<WindowStateAnimator, Region>) msg.obj;
- final WindowStateAnimator winAnimator = pair.first;
- winAnimator.setTransparentRegionHint(pair.second);
- break;
- }
-
case DO_ANIMATION_CALLBACK: {
try {
((IRemoteCallback)msg.obj).sendResult(null);
@@ -7146,13 +7118,13 @@
}
public void getInitialDisplaySize(int displayId, Point size) {
- // TODO(cmautner): Access to DisplayContent should be locked on mWindowMap. Doing that
- // could lead to deadlock since this is called from ActivityManager.
- final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
- synchronized(displayContent.mDisplaySizeLock) {
- size.x = displayContent.mInitialDisplayWidth;
- size.y = displayContent.mInitialDisplayHeight;
+ synchronized (mWindowMap) {
+ final DisplayContent displayContent = getDisplayContentLocked(displayId);
+ if (displayContent != null) {
+ synchronized(displayContent.mDisplaySizeLock) {
+ size.x = displayContent.mInitialDisplayWidth;
+ size.y = displayContent.mInitialDisplayHeight;
+ }
}
}
}
@@ -7813,7 +7785,7 @@
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO");
int transit = mAppTransition.getAppTransition();
if (mSkipAppTransitionAnimation) {
- transit = WindowManagerPolicy.TRANSIT_UNSET;
+ transit = AppTransition.TRANSIT_UNSET;
}
mAppTransition.goodToGo();
mStartingIconInTransition = false;
@@ -7901,28 +7873,28 @@
if (closingAppHasWallpaper && openingAppHasWallpaper) {
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!");
switch (transit) {
- case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
- case WindowManagerPolicy.TRANSIT_TASK_OPEN:
- case WindowManagerPolicy.TRANSIT_TASK_TO_FRONT:
- transit = WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN;
+ case AppTransition.TRANSIT_ACTIVITY_OPEN:
+ case AppTransition.TRANSIT_TASK_OPEN:
+ case AppTransition.TRANSIT_TASK_TO_FRONT:
+ transit = AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN;
break;
- case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
- case WindowManagerPolicy.TRANSIT_TASK_CLOSE:
- case WindowManagerPolicy.TRANSIT_TASK_TO_BACK:
- transit = WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_CLOSE;
+ case AppTransition.TRANSIT_ACTIVITY_CLOSE:
+ case AppTransition.TRANSIT_TASK_CLOSE:
+ case AppTransition.TRANSIT_TASK_TO_BACK:
+ transit = AppTransition.TRANSIT_WALLPAPER_INTRA_CLOSE;
break;
}
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit: " + transit);
} else if ((oldWallpaper != null) && !mOpeningApps.contains(oldWallpaper.mAppToken)) {
// We are transitioning from an activity with
// a wallpaper to one without.
- transit = WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE;
+ transit = AppTransition.TRANSIT_WALLPAPER_CLOSE;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit away from wallpaper: " + transit);
} else if (mWallpaperTarget != null && mWallpaperTarget.isVisibleLw()) {
// We are transitioning from an activity without
// a wallpaper to now showing the wallpaper
- transit = WindowManagerPolicy.TRANSIT_WALLPAPER_OPEN;
+ transit = AppTransition.TRANSIT_WALLPAPER_OPEN;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
"New transit into wallpaper: " + transit);
}
@@ -8065,7 +8037,7 @@
private int handleAnimatingStoppedAndTransitionLocked() {
int changes = 0;
- mAppTransition.setRunning(false);
+ mAppTransition.setIdle();
// Restore window app tokens to the ActivityManager views
for (int i = mAnimatingAppTokens.size() - 1; i >= 0; i--) {
mAnimatingAppTokens.get(i).sendingToBottom = false;
@@ -8219,18 +8191,8 @@
mInnerFields.mDimming = true;
final WindowStateAnimator winAnimator = w.mWinAnimator;
if (!mAnimator.isDimmingLocked(winAnimator)) {
- final int width, height;
- if (attrs.type == TYPE_BOOT_PROGRESS) {
- final DisplayInfo displayInfo = w.mDisplayContent.getDisplayInfo();
- width = displayInfo.logicalWidth;
- height = displayInfo.logicalHeight;
- } else {
- width = innerDw;
- height = innerDh;
- }
if (localLOGV) Slog.v(TAG, "Win " + w + " start dimming.");
- startDimmingLocked(
- winAnimator, w.mExiting ? 0 : w.mAttrs.dimAmount, width, height);
+ startDimmingLocked(winAnimator, w.mExiting ? 0 : w.mAttrs.dimAmount);
}
}
}
@@ -8926,14 +8888,12 @@
}
}
- void startDimmingLocked(final WindowStateAnimator winAnimator, final float target,
- final int width, final int height) {
- mAnimator.setDimParamsLocked(winAnimator.mWin.getDisplayId(),
- new DimAnimator.Parameters(winAnimator, width, height, target));
+ void startDimmingLocked(final WindowStateAnimator winAnimator, final float target) {
+ mAnimator.setDimWinAnimatorLocked(winAnimator.mWin.getDisplayId(), winAnimator);
}
void stopDimmingLocked(int displayId) {
- mAnimator.setDimParamsLocked(displayId, null);
+ mAnimator.setDimWinAnimatorLocked(displayId, null);
}
private boolean needsLayout() {
@@ -8950,8 +8910,6 @@
boolean doRequest = false;
final int bulkUpdateParams = mAnimator.mBulkUpdateParams;
- // TODO(cmautner): As the number of bits grows, use masks of bit groups to
- // eliminate unnecessary tests.
if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) {
mInnerFields.mUpdateRotation = true;
doRequest = true;
@@ -9250,9 +9208,7 @@
mPolicy.setLastInputMethodWindowLw(null, null);
if (mAppTransition.isTransitionSet()) {
- mAppTransition.setAppTransition(WindowManagerPolicy.TRANSIT_UNSET);
- mAppTransition.clear();
- mAppTransition.setReady();
+ mAppTransition.freeze();
}
if (PROFILE_ORIENTATION) {
diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java
index 5fd42c2..cb11be3 100644
--- a/services/java/com/android/server/wm/WindowState.java
+++ b/services/java/com/android/server/wm/WindowState.java
@@ -945,11 +945,11 @@
}
}
- /** Returns true if this window desires key events.
- * TODO(cmautner): Is this the same as {@link WindowManagerService#canBeImeTarget}
+ /**
+ * @return true if this window desires key events.
*/
public final boolean canReceiveKeys() {
- return isVisibleOrAdding()
+ return isVisibleOrAdding()
&& (mViewVisibility == View.VISIBLE)
&& ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0);
}
diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java
index 5b7cb99..a4c6a9e 100644
--- a/services/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/java/com/android/server/wm/WindowStateAnimator.java
@@ -12,6 +12,7 @@
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.graphics.Region;
import android.os.Debug;
import android.util.Slog;
@@ -1183,9 +1184,7 @@
mAnimator.setPendingLayoutChanges(displayId,
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
if ((w.mAttrs.flags & LayoutParams.FLAG_DIM_BEHIND) != 0) {
- final DisplayInfo displayInfo = mWin.mDisplayContent.getDisplayInfo();
- mService.startDimmingLocked(this, w.mExiting ? 0 : w.mAttrs.dimAmount,
- displayInfo.appWidth, displayInfo.appHeight);
+ mService.startDimmingLocked(this, w.mExiting ? 0 : w.mAttrs.dimAmount);
}
} catch (RuntimeException e) {
// If something goes wrong with the surface (such
@@ -1318,7 +1317,7 @@
}
}
- void setTransparentRegionHint(final Region region) {
+ void setTransparentRegionHintLocked(final Region region) {
if (mSurface == null) {
Slog.w(TAG, "setTransparentRegionHint: null mSurface after mHasSurface true");
return;
@@ -1337,31 +1336,35 @@
}
}
- void setWallpaperOffset(int left, int top) {
- mSurfaceX = left;
- mSurfaceY = top;
- if (mAnimating) {
- // If this window (or its app token) is animating, then the position
- // of the surface will be re-computed on the next animation frame.
- // We can't poke it directly here because it depends on whatever
- // transformation is being applied by the animation.
- return;
- }
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- ">>> OPEN TRANSACTION setWallpaperOffset");
- Surface.openTransaction();
- try {
- if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(mWin,
- "POS " + left + ", " + top, null);
- mSurface.setPosition(mWin.mFrame.left + left, mWin.mFrame.top + top);
- updateSurfaceWindowCrop(false);
- } catch (RuntimeException e) {
- Slog.w(TAG, "Error positioning surface of " + mWin
- + " pos=(" + left + "," + top + ")", e);
- } finally {
- Surface.closeTransaction();
+ void setWallpaperOffset(RectF shownFrame) {
+ final int left = (int) shownFrame.left;
+ final int top = (int) shownFrame.top;
+ if (mSurfaceX != left || mSurfaceY != top) {
+ mSurfaceX = left;
+ mSurfaceY = top;
+ if (mAnimating) {
+ // If this window (or its app token) is animating, then the position
+ // of the surface will be re-computed on the next animation frame.
+ // We can't poke it directly here because it depends on whatever
+ // transformation is being applied by the animation.
+ return;
+ }
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- "<<< CLOSE TRANSACTION setWallpaperOffset");
+ ">>> OPEN TRANSACTION setWallpaperOffset");
+ Surface.openTransaction();
+ try {
+ if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(mWin,
+ "POS " + left + ", " + top, null);
+ mSurface.setPosition(mWin.mFrame.left + left, mWin.mFrame.top + top);
+ updateSurfaceWindowCrop(false);
+ } catch (RuntimeException e) {
+ Slog.w(TAG, "Error positioning surface of " + mWin
+ + " pos=(" + left + "," + top + ")", e);
+ } finally {
+ Surface.closeTransaction();
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ "<<< CLOSE TRANSACTION setWallpaperOffset");
+ }
}
}
@@ -1511,10 +1514,9 @@
}
}
- // TODO(cmautner): Move back to WindowState?
/**
* Choose the correct animation and set it to the passed WindowState.
- * @param transit If WindowManagerPolicy.TRANSIT_PREVIEW_DONE and the app window has been drawn
+ * @param transit If AppTransition.TRANSIT_PREVIEW_DONE and the app window has been drawn
* then the animation will be app_starting_exit. Any other value loads the animation from
* the switch statement below.
* @param isEntrance The animation type the last time this was called. Used to keep from
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
index 50bd46e..036fc43 100644
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp
@@ -490,7 +490,7 @@
static void android_location_GpsLocationProvider_agps_data_conn_closed(JNIEnv* env, jobject obj)
{
if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_open");
+ ALOGE("no AGPS interface in agps_data_conn_closed");
return;
}
sAGpsInterface->data_conn_closed();
@@ -499,7 +499,7 @@
static void android_location_GpsLocationProvider_agps_data_conn_failed(JNIEnv* env, jobject obj)
{
if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_open");
+ ALOGE("no AGPS interface in agps_data_conn_failed");
return;
}
sAGpsInterface->data_conn_failed();
@@ -509,7 +509,7 @@
jint type, jstring hostname, jint port)
{
if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_open");
+ ALOGE("no AGPS interface in set_agps_server");
return;
}
const char *c_hostname = env->GetStringUTFChars(hostname, NULL);
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 2e8de3b..6241a49 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -377,6 +377,8 @@
case RILConstants.NETWORK_MODE_GSM_ONLY:
case RILConstants.NETWORK_MODE_WCDMA_ONLY:
case RILConstants.NETWORK_MODE_GSM_UMTS:
+ case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA:
+ case RILConstants.NETWORK_MODE_LTE_WCDMA:
return PhoneConstants.PHONE_TYPE_GSM;
// Use CDMA Phone for the global mode including CDMA
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index f501b21..077ad68 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -72,7 +72,7 @@
int NETWORK_MODE_LTE_GSM_WCDMA = 9; /* LTE, GSM/WCDMA */
int NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
int NETWORK_MODE_LTE_ONLY = 11; /* LTE Only mode. */
-
+ int NETWORK_MODE_LTE_WCDMA = 12; /* LTE/WCDMA */
int PREFERRED_NETWORK_MODE = NETWORK_MODE_WCDMA_PREF;
int CDMA_CELL_BROADCAST_SMS_DISABLED = 1;
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 2eba4e1..5ee52de 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -81,6 +81,13 @@
throw new UnsupportedOperationException();
}
+ /** @hide */
+ @Override
+ public int getPackageUid(String packageName, int userHandle)
+ throws NameNotFoundException {
+ throw new UnsupportedOperationException();
+ }
+
@Override
public PermissionInfo getPermissionInfo(String name, int flags)
throws NameNotFoundException {
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 9118aea..7d2ba19 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -33,6 +33,33 @@
<meta-data android:name="android.graphics.renderThread" android:value="true" />
<activity
+ android:name="ScaledTextActivity"
+ android:label="_ScaledText">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
+ android:name="ScaledPathsActivity"
+ android:label="_ScaledPaths">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
+ android:name="Alpha8BitmapActivity"
+ android:label="_Alpha8Bitmap">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name="MipMapActivity"
android:label="_MipMap">
<intent-filter>
diff --git a/tests/HwAccelerationTest/res/drawable-nodpi/spot_mask.png b/tests/HwAccelerationTest/res/drawable-nodpi/spot_mask.png
new file mode 100644
index 0000000..8953759
--- /dev/null
+++ b/tests/HwAccelerationTest/res/drawable-nodpi/spot_mask.png
Binary files differ
diff --git a/tests/HwAccelerationTest/res/drawable/patch.9.png b/tests/HwAccelerationTest/res/drawable/patch.9.png
deleted file mode 100644
index e3b3639..0000000
--- a/tests/HwAccelerationTest/res/drawable/patch.9.png
+++ /dev/null
Binary files differ
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/Alpha8BitmapActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/Alpha8BitmapActivity.java
new file mode 100644
index 0000000..5fe512e
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/Alpha8BitmapActivity.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class Alpha8BitmapActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(new BitmapsView(this));
+ }
+
+ static class BitmapsView extends View {
+ private Paint mBitmapPaint;
+ private final Bitmap mBitmap1;
+ private final float[] mVertices;
+
+ BitmapsView(Context c) {
+ super(c);
+
+ Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.spot_mask);
+ mBitmap1 = Bitmap.createBitmap(texture.getWidth(), texture.getHeight(),
+ Bitmap.Config.ALPHA_8);
+ Canvas canvas = new Canvas(mBitmap1);
+ canvas.drawBitmap(texture, 0.0f, 0.0f, null);
+
+ texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
+ BitmapShader shader = new BitmapShader(texture,
+ Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
+
+ final float width = texture.getWidth() / 3.0f;
+ final float height = texture.getHeight() / 3.0f;
+
+ mVertices = new float[] {
+ 0.0f, 0.0f, width, 0.0f, width * 2, 0.0f, width * 3, 0.0f,
+ 0.0f, height, width, height, width * 2, height, width * 4, height,
+ 0.0f, height * 2, width, height * 2, width * 2, height * 2, width * 3, height * 2,
+ 0.0f, height * 4, width, height * 4, width * 2, height * 4, width * 4, height * 4,
+ };
+
+ mBitmapPaint = new Paint();
+ mBitmapPaint.setFilterBitmap(true);
+ mBitmapPaint.setShader(shader);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ canvas.drawColor(0xffffffff);
+ canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBitmapPaint);
+
+ Matrix matrix = new Matrix();
+ matrix.setScale(2.0f, 2.0f);
+ matrix.postTranslate(0.0f, mBitmap1.getHeight());
+ canvas.drawBitmap(mBitmap1, matrix, mBitmapPaint);
+
+ Rect src = new Rect(0, 0, mBitmap1.getWidth() / 2, mBitmap1.getHeight() / 2);
+ Rect dst = new Rect(0, mBitmap1.getHeight() * 3, mBitmap1.getWidth(),
+ mBitmap1.getHeight() * 4);
+ canvas.drawBitmap(mBitmap1, src, dst, mBitmapPaint);
+
+ canvas.translate(0.0f, mBitmap1.getHeight() * 4);
+ canvas.drawBitmapMesh(mBitmap1, 3, 3, mVertices, 0, null, 0, mBitmapPaint);
+
+ invalidate();
+ }
+ }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledPathsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledPathsActivity.java
new file mode 100644
index 0000000..deb4b6b
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledPathsActivity.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.RectF;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ScaledPathsActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final PathsView view = new PathsView(this);
+ setContentView(view);
+ }
+
+ public static class PathsView extends View {
+ private final Paint mPathPaint;
+ private final Path mPath;
+ private final RectF mPathBounds = new RectF();
+
+ public PathsView(Context c) {
+ super(c);
+
+ mPathPaint = new Paint();
+ mPathPaint.setAntiAlias(true);
+ mPathPaint.setColor(0xff0000ff);
+ mPathPaint.setStrokeWidth(5.0f);
+ mPathPaint.setStyle(Paint.Style.FILL);
+
+ mPath = new Path();
+ mPath.moveTo(0.0f, 0.0f);
+ mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
+ mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
+ mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
+
+ mPath.computeBounds(mPathBounds, true);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ canvas.drawARGB(255, 255, 255, 255);
+
+ mPathPaint.setColor(0xff0000ff);
+ mPathPaint.setStyle(Paint.Style.FILL);
+
+ canvas.save();
+ drawPath(canvas, 1.0f, 1.0f);
+ drawPath(canvas, 2.0f, 2.0f);
+ drawPath(canvas, 4.0f, 4.0f);
+ canvas.restore();
+
+ mPathPaint.setColor(0xffff0000);
+ mPathPaint.setStyle(Paint.Style.STROKE);
+
+ canvas.save();
+ drawPath(canvas, 1.0f, 1.0f);
+ drawPath(canvas, 2.0f, 2.0f);
+ drawPath(canvas, 4.0f, 4.0f);
+ canvas.restore();
+ }
+
+ private void drawPath(Canvas canvas, float scaleX, float scaleY) {
+ canvas.save();
+ canvas.scale(scaleX, scaleY);
+ canvas.drawPath(mPath, mPathPaint);
+ canvas.restore();
+ canvas.translate(mPathBounds.width() * scaleX, 0.0f);
+ }
+ }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledTextActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledTextActivity.java
new file mode 100644
index 0000000..e1bf3ea
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ScaledTextActivity.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.test.hwui;
+
+import android.animation.ObjectAnimator;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ScaledTextActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ final ScaledTextView view = new ScaledTextView(this);
+ setContentView(view);
+
+ ObjectAnimator animation = ObjectAnimator.ofFloat(view, "textScale", 1.0f, 10.0f);
+ animation.setDuration(3000);
+ animation.setRepeatCount(ObjectAnimator.INFINITE);
+ animation.setRepeatMode(ObjectAnimator.REVERSE);
+ animation.start();
+
+ }
+
+ public static class ScaledTextView extends View {
+ private static final String TEXT = "Hello libhwui! ";
+
+ private final Paint mPaint;
+ private final Paint mShadowPaint;
+ private final Path mPath;
+
+ private float mScale = 1.0f;
+
+ public ScaledTextView(Context c) {
+ super(c);
+
+ mPath = makePath();
+
+ mPaint = new Paint();
+ mPaint.setAntiAlias(true);
+ mPaint.setTextSize(20.0f);
+
+ mShadowPaint = new Paint();
+ mShadowPaint.setAntiAlias(true);
+ mShadowPaint.setShadowLayer(3.0f, 0.0f, 3.0f, 0xff000000);
+ mShadowPaint.setTextSize(20.0f);
+ }
+
+ public float getTextScale() {
+ return mScale;
+ }
+
+ public void setTextScale(float scale) {
+ mScale = scale;
+ invalidate();
+ }
+
+ private static Path makePath() {
+ Path path = new Path();
+ buildPath(path);
+ return path;
+ }
+
+ private static void buildPath(Path path) {
+ path.moveTo(0.0f, 0.0f);
+ path.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
+ path.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
+ path.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ canvas.drawARGB(255, 255, 255, 255);
+
+ canvas.drawText(TEXT, 30.0f, 30.0f, mPaint);
+
+ canvas.translate(0.0f, 50.0f);
+
+ canvas.save();
+ canvas.scale(mScale, mScale);
+ canvas.drawText(TEXT, 30.0f, 30.0f, mPaint);
+ canvas.restore();
+
+ canvas.translate(0.0f, 250.0f);
+ canvas.save();
+ canvas.scale(3.0f, 3.0f);
+ canvas.drawText(TEXT, 30.0f, 30.0f, mShadowPaint);
+ canvas.translate(100.0f, 0.0f);
+// canvas.drawTextOnPath(TEXT + TEXT + TEXT, mPath, 0.0f, 0.0f, mPaint);
+ canvas.restore();
+
+ float width = mPaint.measureText(TEXT);
+
+ canvas.translate(500.0f, 0.0f);
+ canvas.rotate(45.0f, width * 3.0f / 2.0f, 0.0f);
+ canvas.scale(3.0f, 3.0f);
+ canvas.drawText(TEXT, 30.0f, 30.0f, mPaint);
+ }
+ }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java
index 9849e3c..ceccfaa 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java
@@ -41,26 +41,26 @@
setContentView(view);
}
- private Path makePath() {
+ private static Path makePath() {
Path path = new Path();
buildPath(path);
return path;
}
- private void buildPath(Path path) {
+ private static void buildPath(Path path) {
path.moveTo(0.0f, 0.0f);
path.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
path.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
path.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
}
- private Path makeStraightPath() {
+ private static Path makeStraightPath() {
Path path = new Path();
buildStraightPath(path);
return path;
}
- private void buildStraightPath(Path path) {
+ private static void buildStraightPath(Path path) {
path.moveTo(0.0f, 0.0f);
path.lineTo(400.0f, 0.0f);
}
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ColorCube.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ColorCube.java
index d1dd47c..f313c46 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ColorCube.java
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ColorCube.java
@@ -25,6 +25,7 @@
import android.renderscript.Script;
import android.renderscript.ScriptC;
import android.renderscript.ScriptGroup;
+import android.renderscript.ScriptIntrinsic3DLUT;
import android.renderscript.ScriptIntrinsicColorMatrix;
import android.renderscript.Type;
import android.util.Log;
@@ -32,8 +33,11 @@
public class ColorCube extends TestBase {
private Allocation mCube;
private ScriptC_colorcube mScript;
+ private ScriptIntrinsic3DLUT mIntrinsic;
+ private boolean mUseIntrinsic;
- public ColorCube() {
+ public ColorCube(boolean useIntrinsic) {
+ mUseIntrinsic = useIntrinsic;
}
private void initCube() {
@@ -52,13 +56,11 @@
for (int z = 0; z < sz; z++) {
for (int y = 0; y < sy; y++) {
for (int x = 0; x < sx; x++ ) {
-
- dat[z*sy*sx + y*sx + x] = //0xff000000 |
- (((x >> 2) | (x<<3)) << 0) |
- (((y >> 2) | (y<<3)) << 8) |
- ((z | (z<<4)) << 16);
-
-
+ int v = 0xff000000;
+ v |= (0xff * x / (sx - 1));
+ v |= (0xff * y / (sy - 1)) << 8;
+ v |= (0xff * z / (sz - 1)) << 16;
+ dat[z*sy*sx + y*sx + x] = v;
}
}
}
@@ -68,16 +70,19 @@
public void createTest(android.content.res.Resources res) {
mScript = new ScriptC_colorcube(mRS, res, R.raw.colorcube);
+ mIntrinsic = ScriptIntrinsic3DLUT.create(mRS, Element.U8_4(mRS));
initCube();
mScript.invoke_setCube(mCube);
-
-
- //mScript.invoke_setMatrix(m);
+ mIntrinsic.setLUT(mCube);
}
public void runTest() {
- mScript.forEach_root(mInPixelsAllocation, mOutPixelsAllocation);
+ if (mUseIntrinsic) {
+ mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
+ } else {
+ mScript.forEach_root(mInPixelsAllocation, mOutPixelsAllocation);
+ }
}
}
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
index 18f438a..a8c1399 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
@@ -292,7 +292,10 @@
mTest = new WhiteBalance();
break;
case 36:
- mTest = new ColorCube();
+ mTest = new ColorCube(false);
+ break;
+ case 37:
+ mTest = new ColorCube(true);
break;
}
@@ -305,7 +308,7 @@
}
void setupTests() {
- mTestNames = new String[37];
+ mTestNames = new String[38];
mTestNames[0] = "Levels Vec3 Relaxed";
mTestNames[1] = "Levels Vec4 Relaxed";
mTestNames[2] = "Levels Vec3 Full";
@@ -343,6 +346,7 @@
mTestNames[34] = "Exposure";
mTestNames[35] = "White Balance";
mTestNames[36] = "Color Cube";
+ mTestNames[37] = "Color Cube (3D LUT intrinsic)";
mTestSpinner.setAdapter(new ArrayAdapter<String>(
this, R.layout.spinner_layout, mTestNames));
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colorcube.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colorcube.rs
index 09b3f69..5250474 100644
--- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colorcube.rs
+++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colorcube.rs
@@ -20,78 +20,71 @@
static rs_allocation gCube;
-static short4 gDims;
-static short4 gFracMask;
-static short4 gFracBits;
-static short4 gFracShift;
-static int4 gFinalShift;
-static int4 gFinalAdd;
+static int4 gDims;
+static int4 gCoordMul;
+
void setCube(rs_allocation c) {
gCube = c;
- gDims.x = rsAllocationGetDimX(gCube) - 1;
- gDims.y = rsAllocationGetDimY(gCube) - 1;
- gDims.z = rsAllocationGetDimZ(gCube) - 1;
+ gDims.x = rsAllocationGetDimX(gCube);
+ gDims.y = rsAllocationGetDimY(gCube);
+ gDims.z = rsAllocationGetDimZ(gCube);
gDims.w = 0;
- gFracMask = gDims;
- gFracBits = (short4)32 - clz(gFracMask);
- gFracShift = (short4)8 - gFracBits;
+ float4 m = (float4)(1.f / 255.f) * convert_float4(gDims - 1);
+ gCoordMul = convert_int4(m * (float4)0x10000);
rsDebug("dims", gDims);
- rsDebug("gFracMask", gFracMask);
- rsDebug("gFracBits", gFracBits);
-
- gFinalShift = gFracShift.x + gFracShift.y + gFracShift.z;
- gFinalAdd = (((int4)1 << gFinalShift) - (int4)1) >> (int4)1;
-
- rsDebug("gFinalShift", gFinalShift);
- rsDebug("gFinalAdd", gFinalAdd);
-
+ rsDebug("gCoordMul", gCoordMul);
}
void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
//rsDebug("root", in);
- short4 baseCoord = convert_short4(*in);
- short4 coord1 = baseCoord >> gFracShift;
- short4 coord2 = min(coord1 + (short4)1, gDims);
+ int4 baseCoord = convert_int4(*in) * gCoordMul;
+ int4 coord1 = baseCoord >> (int4)16;
+ int4 coord2 = min(coord1 + 1, gDims - 1);
- short4 weight2 = baseCoord - (coord1 << gFracShift);
- short4 weight1 = ((short4)1 << gFracShift) - weight2;
+ int4 weight2 = baseCoord & 0xffff;
+ int4 weight1 = (int4)0x10000 - weight2;
- ushort4 v000 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord1.x, coord1.y, coord1.z));
- ushort4 v100 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord2.x, coord1.y, coord1.z));
- ushort4 v010 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord1.x, coord2.y, coord1.z));
- ushort4 v110 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord2.x, coord2.y, coord1.z));
- ushort4 v001 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord1.x, coord1.y, coord2.z));
- ushort4 v101 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord2.x, coord1.y, coord2.z));
- ushort4 v011 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord1.x, coord2.y, coord2.z));
- ushort4 v111 = convert_ushort4(rsGetElementAt_uchar4(gCube, coord2.x, coord2.y, coord2.z));
+ uint4 v000 = convert_uint4(rsGetElementAt_uchar4(gCube, coord1.x, coord1.y, coord1.z));
+ uint4 v100 = convert_uint4(rsGetElementAt_uchar4(gCube, coord2.x, coord1.y, coord1.z));
+ uint4 v010 = convert_uint4(rsGetElementAt_uchar4(gCube, coord1.x, coord2.y, coord1.z));
+ uint4 v110 = convert_uint4(rsGetElementAt_uchar4(gCube, coord2.x, coord2.y, coord1.z));
+ uint4 v001 = convert_uint4(rsGetElementAt_uchar4(gCube, coord1.x, coord1.y, coord2.z));
+ uint4 v101 = convert_uint4(rsGetElementAt_uchar4(gCube, coord2.x, coord1.y, coord2.z));
+ uint4 v011 = convert_uint4(rsGetElementAt_uchar4(gCube, coord1.x, coord2.y, coord2.z));
+ uint4 v111 = convert_uint4(rsGetElementAt_uchar4(gCube, coord2.x, coord2.y, coord2.z));
- uint4 yz00 = convert_uint4((v000 * weight1.x) + (v100 * weight2.x));
- uint4 yz10 = convert_uint4((v010 * weight1.x) + (v110 * weight2.x));
- uint4 yz01 = convert_uint4((v001 * weight1.x) + (v101 * weight2.x));
- uint4 yz11 = convert_uint4((v011 * weight1.x) + (v111 * weight2.x));
+ uint4 yz00 = ((v000 * weight1.x) + (v100 * weight2.x)) >> (int4)8;
+ uint4 yz10 = ((v010 * weight1.x) + (v110 * weight2.x)) >> (int4)8;
+ uint4 yz01 = ((v001 * weight1.x) + (v101 * weight2.x)) >> (int4)8;
+ uint4 yz11 = ((v011 * weight1.x) + (v111 * weight2.x)) >> (int4)8;
- uint4 z0 = (yz00 * weight1.y) + (yz10 * weight2.y);
- uint4 z1 = (yz01 * weight1.y) + (yz11 * weight2.y);
+ uint4 z0 = (yz00 * weight1.y) + (yz10 * weight2.y) >> (int4)16;
+ uint4 z1 = (yz01 * weight1.y) + (yz11 * weight2.y) >> (int4)16;
- uint4 v = (z0 * weight1.z) + (z1 * weight2.z);
+ uint4 v = (z0 * weight1.z) + (z1 * weight2.z) >> (int4)16;
+ uint4 v2 = (v + 0x7f) >> (int4)8;
+
+ *out = convert_uchar4(v2);
+ out->a = 0xff;
#if 0
- if (x + y < 100) {
- rsDebug("coord1", coord1);
- rsDebug("coord2", coord2);
- rsDebug("weight1", weight1);
- rsDebug("weight2", weight2);
- rsDebug("yz00", yz00);
- rsDebug("z0", z0);
- rsDebug("v", v);
+ if (in->r != out->r) {
+ rsDebug("dr", in->r - out->r);
+ //rsDebug("in", convert_int4(*in));
+ //rsDebug("coord1", coord1);
+ //rsDebug("coord2", coord2);
+ //rsDebug("weight1", weight1);
+ //rsDebug("weight2", weight2);
+ //rsDebug("yz00", yz00);
+ //rsDebug("z0", z0);
+ //rsDebug("v", v);
+ //rsDebug("v2", v2);
+ //rsDebug("out", convert_int4(*out));
}
#endif
-
- *out = convert_uchar4((v + gFinalAdd) >> gFinalShift);
- out->a = 0xff;
}
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index fde3bd6..5089b9d 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -38,6 +38,7 @@
kCommandRemove,
kCommandPackage,
kCommandCrunch,
+ kCommandSingleCrunch,
} Command;
/*
@@ -62,6 +63,7 @@
mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
+ mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
mArgc(0), mArgv(NULL)
{}
~Bundle(void) {}
@@ -176,6 +178,10 @@
bool getUseCrunchCache() const { return mUseCrunchCache; }
const char* getOutputTextSymbols() const { return mOutputTextSymbols; }
void setOutputTextSymbols(const char* val) { mOutputTextSymbols = val; }
+ const char* getSingleCrunchInputFile() const { return mSingleCrunchInputFile; }
+ void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
+ const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
+ void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
/*
* Set and get the file specification.
@@ -283,6 +289,8 @@
bool mUseCrunchCache;
bool mErrorOnFailedInsert;
const char* mOutputTextSymbols;
+ const char* mSingleCrunchInputFile;
+ const char* mSingleCrunchOutputFile;
/* file specification */
int mArgc;
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 0a5e590..b98925b 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -7,6 +7,7 @@
#include "Bundle.h"
#include "ResourceFilter.h"
#include "ResourceTable.h"
+#include "Images.h"
#include "XMLNode.h"
#include <utils/Log.h>
@@ -1839,6 +1840,21 @@
return NO_ERROR;
}
+/*
+ * Do PNG Crunching on a single flag
+ * -i points to a single png file
+ * -o points to a single png output file
+ */
+int doSingleCrunch(Bundle* bundle)
+{
+ fprintf(stdout, "Crunching single PNG file: %s\n", bundle->getSingleCrunchInputFile());
+ fprintf(stdout, "\tOutput file: %s\n", bundle->getSingleCrunchOutputFile());
+
+ String8 input(bundle->getSingleCrunchInputFile());
+ String8 output(bundle->getSingleCrunchOutputFile());
+ return preProcessImageToCache(bundle, input, output);
+}
+
char CONSOLE_DATA[2925] = {
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 95, 46, 32, 32, 32, 32, 32, 32, 32, 32, 32,
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index f398de0..32fecb2 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -85,7 +85,11 @@
" Add specified files to Zip-compatible archive.\n\n", gProgName);
fprintf(stderr,
" %s c[runch] [-v] -S resource-sources ... -C output-folder ...\n"
- " Do PNG preprocessing and store the results in output folder.\n\n", gProgName);
+ " Do PNG preprocessing on one or several resource folders\n"
+ " and store the results in the output folder.\n\n", gProgName);
+ fprintf(stderr,
+ " %s s[ingleCrunch] [-v] -i input-file -o outputfile\n"
+ " Do PNG preprocessing on a single file.\n\n", gProgName);
fprintf(stderr,
" %s v[ersion]\n"
" Print program version.\n\n", gProgName);
@@ -203,13 +207,14 @@
// printf(" %d: '%s'\n", i, bundle->getFileSpecEntry(i));
switch (bundle->getCommand()) {
- case kCommandVersion: return doVersion(bundle);
- case kCommandList: return doList(bundle);
- case kCommandDump: return doDump(bundle);
- case kCommandAdd: return doAdd(bundle);
- case kCommandRemove: return doRemove(bundle);
- case kCommandPackage: return doPackage(bundle);
- case kCommandCrunch: return doCrunch(bundle);
+ case kCommandVersion: return doVersion(bundle);
+ case kCommandList: return doList(bundle);
+ case kCommandDump: return doDump(bundle);
+ case kCommandAdd: return doAdd(bundle);
+ case kCommandRemove: return doRemove(bundle);
+ case kCommandPackage: return doPackage(bundle);
+ case kCommandCrunch: return doCrunch(bundle);
+ case kCommandSingleCrunch: return doSingleCrunch(bundle);
default:
fprintf(stderr, "%s: requested command not yet supported\n", gProgName);
return 1;
@@ -249,6 +254,8 @@
bundle.setCommand(kCommandPackage);
else if (argv[1][0] == 'c')
bundle.setCommand(kCommandCrunch);
+ else if (argv[1][0] == 's')
+ bundle.setCommand(kCommandSingleCrunch);
else {
fprintf(stderr, "ERROR: Unknown command '%s'\n", argv[1]);
wantUsage = true;
@@ -427,6 +434,28 @@
convertPath(argv[0]);
bundle.setCrunchedOutputDir(argv[0]);
break;
+ case 'i':
+ argc--;
+ argv++;
+ if (!argc) {
+ fprintf(stderr, "ERROR: No argument supplied for '-i' option\n");
+ wantUsage = true;
+ goto bail;
+ }
+ convertPath(argv[0]);
+ bundle.setSingleCrunchInputFile(argv[0]);
+ break;
+ case 'o':
+ argc--;
+ argv++;
+ if (!argc) {
+ fprintf(stderr, "ERROR: No argument supplied for '-o' option\n");
+ wantUsage = true;
+ goto bail;
+ }
+ convertPath(argv[0]);
+ bundle.setSingleCrunchOutputFile(argv[0]);
+ break;
case '0':
argc--;
argv++;
diff --git a/tools/aapt/Main.h b/tools/aapt/Main.h
index d20c601..a6b39ac 100644
--- a/tools/aapt/Main.h
+++ b/tools/aapt/Main.h
@@ -29,6 +29,7 @@
extern int doRemove(Bundle* bundle);
extern int doPackage(Bundle* bundle);
extern int doCrunch(Bundle* bundle);
+extern int doSingleCrunch(Bundle* bundle);
extern int calcPercent(long uncompressedLen, long compressedLen);
diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
index ab5c4a6..446d139 100644
--- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
+++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
@@ -218,7 +218,7 @@
return defValue;
}
- if (s == null) {
+ if (s == null || s.length() == 0) {
return defValue;
}